【Java Spring】SpringBoot 五大类注解

news2024/11/23 8:39:06

文章目录

    • Spring Boot 注解简介
    • 1、五大类注解的作用
    • 2、五大类注解的关系
    • 3、通过注解获取对象
    • 4、获取Bean对象名规则解析

Spring Boot 注解简介

Spring Boot的核心就是注解。Spring Boot通过各种组合注解,极大地简化了Spring项目的搭建和开发。五大类注解是Spring Boot注解中的关键,接下来就给大家做详细的介绍。
使用注解的优势:
1.采用纯java代码,不在需要配置繁杂的xml文件
2.在配置中也可享受面向对象带来的好处
3.类型安全对重构可以提供良好的支持
4.减少复杂配置文件的同时亦能享受到springIoC容器提供的功能

1、五大类注解的作用

想要将对象存储到Spring当中,有两种注解类型可以实现

1、五大类注解:@Controller、@Service、@Repository、@Component、@Configuration(控制器,服务,存储,组建,配置)

2、方法注解:@Bean(下节介绍)

  • @Controller(控制器):归属业务逻辑层,用来控制用户行为,用来检查用户参数的有效性,前端的请求合理性负责

  • @Service(服务):归属服务层,调用持久化类实现相应的功能,对前端请求的合理性负责【不直接和数据库交互的,类似于控制中心】

  • @Repository(仓库):归属持久层,是直接和数据库进行交互的,通常每一个表都会对应一个仓库类,对数据库的某一个表负责(@Repository)

  • @Configuration(配置):归属配置层,是用来配置当前项目的信息的,项目全局配置负责

  • @Component(组件):归属于公共工具类,提供某些公共的方法

2、五大类注解的关系

首先查看一下Controller的定义,首先在IDEA中敲一个@Controller,使用Command + 左键查看定义

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}

可以发现@Controller注解继承了@Component注解,查看其他非@Component的剩下三大类注解,发现它们都继承了@Component注解,所以我们可以认为@Component注解是其他四大类注解的父类

3、通过注解获取对象

1、使用注解向spring注入ArticleController

package com.demo.componect;
import org.springframework.stereotype.Controller;

@Controller
public class ArticleController {
    public String sayHello() {
        return "Hello Article Controller";
    }
}

2、获取ArticleController对象

public class App {
    public static void main(String[] args) {
      	// 	获取上下文
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
      	// 从Spring汇总获取Bean对象
        ArticleController articleController = context.getBean("articleController", ArticleController.class);
        System.out.println(articleController.sayHello());
    }
}

规则:获取注解注入对象的名称需要将类名第一个字母小写

问题

  • 一、如果类名首字母小写,如何从Spring中会去Bean?和首字母大写一样,直接将类名首字母小写来获取对象

  • 二、如果首字母和第二个字母都是大写,会怎么样? 当使用默认规则,首字母小写获取Bean对象,失败! 使用原类名获取Bean对象 成功!

  • 三、项目中没有目录,全部写在java根目录下? spring-config.xml base-package = "**" 通配符匹配

结论:当使用5大类注解时,默认情况下获取Bean对象,只需要将类名首字母小写即可。当然Bean对象首字母和第二个字母都是大写时,此时需要原类名才能正确的获取到Bean对象

4、获取Bean对象名规则解析

Spring获取Bean对象的规则是如何实现的,我们需要通过阅读Spring源码进行理解

1、shift + shift 全局搜索

2、搜索BeanName进行筛选,查看找到AnnotationBeanNameGenerator(注解 Bean 名称生成)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、使用Structure查看类方法,找到公有函数generateBeanName,然后一层层的查找

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4、找到最终结果decapitalize()函数

若名称为空字符串或Null则直接返回,若名称大于两个字符,并且第二个字母大写,第一个字母也大写则直接返回名称,否则将名称的第一个字符小写后返回

public static String decapitalize(String name) {
        if (name == null || name.length() == 0) {
            return name;
        }
  			// 首字母和次字母大写,则返回原名称
        if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
                        Character.isUpperCase(name.charAt(0))){
            return name;
        }
  			// 首字母小写返回
        char chars[] = name.toCharArray();
        chars[0] = Character.toLowerCase(chars[0]);
        return new String(chars);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1259003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用泰勒展开线性化

在点附近做泰勒展开: 当和很接近的时候,很小,更小,所以可以忽略及后面的高阶项,得到 因为、都是常数,所以等式右边是 x的线性方程,在点附近进行了线性化。 举个例子: 假设 那么做一…

【Linux】安卓端JuiceSSH结合内网穿透实现远程连接服务器

目录 前言1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 前言 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? 本文介绍 cpolarJuiceSSH 实现手机端远程连接Linux虚拟…

linux 命令 sudo、su 命令

sudo命令详解 1、初识sudo sudo是linux下常用的允许普通用户使用超级用户权限的工具,sudo 用来执行需要提升权限(通常是作为 root 用户)的命令,允许系统管理员让普通用户执行一些或者全部的root命令,如halt&#xff…

C++中类的静态成员、存储、this、友元和运算符重载

静态成员 在类定义中,它的成员(包括成员变量和成员函数),这些成员可以用关键字static 声明为静态的,称为静态成员。 不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个…

搜索百度可以直接生成代码拉

先看效果图: 使用示例: 比如我要搜索“JS取一个数在两个数更近”的方法,直接搜“JS取一个数在两个数更近”,点击百度一下,就会出现想要的代码,如上图。

网站频频告警故障排查实录

故障描述 位于某Proxmox VE超融合集群上的一个网站频频报警,表现的形式是一会儿服务不可用,一会儿又恢复(如下图所示),但同一集群上的其他Web站点未发现异常。 可能的原因 1)出口带宽占满。 2)…

【技巧】Excel表格如何退出“只读方式”?

如果Excel表格被设置了“只读模式”,那每次打开Excel都会出现对话框提示是否以“只读方式”打开,并且以“只读方式”打开的Excel,如果进行更改是无法保存原文件的。那要如何退出“只读方式”呢? 首先,我们要看下Excel表…

【数据结构】顺序表---C语言版

【数据结构】顺序表 前言:一、线性表二、顺序表1.顺序表的概念及结构:2.顺序表的分类:3.顺序表缺陷: 三、顺序表的代码实现:1.头文件:2.函数文件:3.测试文件: 四、顺序表的相关OJ题&…

私域成交的方式---朋友圈成交

朋友圈不止是生活,也是工作营销的很好场所。朋友圈成交也就是私域成交中养客户成交。和之前的微商相似,微商就是在朋友圈发内容,引起客户的兴趣,再转到1对1私聊进行成交。 适合产品:所有的产品都适合,不管…

Python实现艺术设计?提取图片中颜色并绘制成可视化图表,从大师作品中提取配色方案

文章目录 导入模块并加载图片提取颜色并整合成表格绘制图表实战环节关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠…

android基于UDP实现聊天小功能

一、DatagramSocket DatagramSocket 是 Java 中用于发送和接收 UDP 数据包的类。它提供了创建和管理 UDP 套接字的功能。以下是 DatagramSocket 类的一些常用方法: DatagramSocket(): 创建一个未绑定到特定本地地址和端口的 DatagramSocket 实例。 DatagramSocket…

普乐蛙绵阳科博会一场VR科普航天科学盛宴科普知识

普乐蛙绵阳科普展:一场科学盛宴,点燃孩子探索欲望的火花! 普乐蛙绵阳科普展正在如火如荼地进行中,吸引了无数孩子和家长的热情参与。这场科普盛宴以独特的内外视角,让人们感受到科学的魅力,激发了孩子们对知识的渴望和…

蚁剑低版本反制

蚁剑低版本反制 漏洞概述 中国蚁剑是一款开源的跨平台网站管理工具&#xff0c;它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。影响范围 AntSword <2.0.7 蚁剑实验版本&#xff1a;2.0.7 环境搭建&#xff1a; 172.16.1.233&#xff08;蓝队服…

如何在 Photoshop 中制作金像

如何使用渐变贴图和一些鲜为人知的 Photoshop 图像效果在 Photoshop 中制作金像 1. 如何为图像添加噪点 步骤 1 首先&#xff0c;将“颜色填充”图层设置为淡蓝色 #a9c9dd 颜色。 步骤 2 接下来&#xff0c;让我们右键单击>创建智能对象&#xff0c;以防万一我们以后想要…

【EasyExcel】导出excel并支持自定义设置数据行背景颜色等

需求背景&#xff1a; 根据查询条件将列表数据导出&#xff0c;并筛选出满足某个条件的数据&#xff0c;将满足条件的数据的背景颜色设置成黄色。 &#xff08;本文例子如&#xff1a;name出现的次数大于等于2&#xff0c;将相关数据背景颜色都设置为黄色&#xff09; …

代码签名证书是如何保护软件?

随着互联网的普及和技术的发展&#xff0c;软件开发已经成为了一个非常重要的行业。然而&#xff0c;软件安全问题也日益凸显&#xff0c;恶意软件、病毒、木马等威胁着用户的数据安全和隐私。为了确保软件的安全和可靠性&#xff0c;开发者需要采取一系列措施来保护他们的产品…

在线教育行业内卷突围,持续激活平台用户体验是关键

在线教育并不等同于K12教育。 众所周知&#xff0c;越来越卷的考试制度&#xff0c;已经被家长、学生们的谩骂和吐槽淹没了好几层。各种减负、杜绝课后补课等条例纷纷出台&#xff0c;不断的挤压着K12教育企业的生存空间。 于是乎&#xff0c;大家都认为&#xff0c;在线教育…

笔记62:注意力汇聚 --- Nadaraya_Watson 核回归

本地笔记地址&#xff1a;D:\work_file\&#xff08;4&#xff09;DeepLearning_Learning\03_个人笔记\3.循环神经网络\第10章&#xff1a;动手学深度学习~注意力机制 a a a a a a a a a a a a a a a a

一键换肤功能

使用css3的css变量来实现 示例&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&qu…

好用的IDEA插件推荐

前言 Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款…