前言

在 Spring 中想要更简单的存储和读取对象的核心是使用注解,而在使用注解之前一定要配置好扫描文件

spring aop 获取被注解的字段名称_spring


一、五大类注解

1.@Controller、@Service、@Repository、@Component、@Configuration。

spring aop 获取被注解的字段名称_命名规则_02


spring aop 获取被注解的字段名称_spring_03


可以看到,不管使用的是@Controller还是@Service,都能在Spring中获取到。

spring aop 获取被注解的字段名称_User_04


spring aop 获取被注解的字段名称_数据库_05


我们来看看各个注解的源码就知道了

spring aop 获取被注解的字段名称_命名规则_06


spring aop 获取被注解的字段名称_数据库_07


spring aop 获取被注解的字段名称_数据库_08


spring aop 获取被注解的字段名称_spring_09

我们发现其实每个注解都使用了@Component注解,相当我们Java中的继承关系,其他四个注解都相当于@Component的子类。

2、既然功能相同为什么还要有这么多注解?

这和为什么每个省/市都有⾃⼰的⻋牌号是⼀样的,这样做的好处除了可以节约号码之外,更重要的作⽤是可以直观的标识⼀辆⻋的归属地。

那么为什么需要怎么多的类注解也是相同的原因,就是让程序员看到类注解之后,就能直接了解当前类的⽤途,⽐如:
@Controller:表示的是业务逻辑层;
@Servie:服务层;
@Repository:持久层;
@Configuration:配置层。
@Component:组件层

3、Bean的命名规则

通过上⾯示例,我们可以看出,通常我们 bean 使⽤的都是标准的⼤驼峰命名,⽽读取的时候⾸字⺟⼩写就可以获取到 bean 了,如下图所示:

spring aop 获取被注解的字段名称_User_10


然⽽,当我们⾸字⺟和第⼆个字⺟都是⼤写时,就不能正常读取到 bean 了,如下图所示:

spring aop 获取被注解的字段名称_User_11

而将参数改成UContrller后就能正常运行:

spring aop 获取被注解的字段名称_命名规则_12


这是因为Spring对Bean有自己的一套命名规则,我们可以来看源码:

spring aop 获取被注解的字段名称_java_13

二、方法注解

类注解是添加到某个类上的,⽽⽅法注解是放到某个⽅法上的,如以下代码的实现:

在 Spring 框架的设计中,⽅法注解 @Bean 要配合类注解才能将对象正常的存储到 Spring 容器中,如

@Controller
public class MethodContrller {
    @Bean("m1")
    public User method(){
        User user = new User();
        user.age = 2;
        return user;
    }
}

@Bean()括号中的是关于bean的重命名数组,不写的话就是该方法的名字,运行结果代码如下图:

spring aop 获取被注解的字段名称_命名规则_14