Spring提供了4种自动装配Bean依赖关系的策略。
一、Spring的4种自动装配策略
1、byName,根据名称注入:把与Bean属性具有相同名字(或ID)的其他Bean自动装配到Bean对应的属性中,如果没有则该属性不装配。
2、byType,根据类型注入:把与Bean的属性具有相同类型的其他Bean自动装配到Bean对应的属性中。如果没有就不装配。
3、constructor,构造方法注入:把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应的入参中。
4、autotetect:首先尝试用构造方法注入,失败了就用byType
以上来自《Spring实战》一书中的分类,对Spring中装配方式的分类方式很多,以上应该是根据原理分。有人又将其分为构造方法注入,setter注入,基于注解的注入,我想这可能是根据操作方法分。
二、自动装配方式与SpringBoot中的注解的联系
SpringBoot中,我们使用注解来实现依赖注入。根据使用场景可以分为以下两类
1、使用Bean:完成属性、方法的组装。一般用来修饰字段,构造函数,或者设置方法,并做注入。
我将其理解为子Bean,是作为一个“Bean爸爸”的内部成员来为“Bean爸爸”服务的。
- @Autowired:属于byType
- @Resource:属于byName
2、注册Bean:把普通java类实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>。这个对象的内部可能用到@Autowired , @Resource来完成对象、属性、方法完美组装。——这是个“爸爸Bean”
- @Component:泛指组件,当组件不好归类的时候,可以使用这个注解进行标注
- @Controller:标注控制层组件,负责将用户发来的URL请求转发到对应的服务接口
- @Service:标注业务层组件
- @Repository:用于标注数据库访问Dao组件
- @Configration:可理解为用spring的时候xml里面的<beans>标签
三、Spring Boot中常用的其他注解
- @SpringBootApplication:注解他们的main函数所在的类
- =@Configuration+ @EnableAutoConfiguration +@ComponentScan
- @ResponseBody:该方法的返回结果直接写入HTTP response body中
- @RestController=@ResponseBody + @Controller:标注控制层组件
- @RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射
- @GetMapping=@RequestMapping(method = RequestMethod.GET):将HTTP Get 映射到 特定的处理方法上。
- @PostMapping=@RequestMapping(method = RequestMethod.POST)
- @PathVariable:获取url中的数据。
- @ComponentScan 组件扫描,发现和组装一些Bean。
- @EnableAutoConfiguration自动配置。
- @SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。
- @Data 自动生成setter、getter方法
- @Import:用来导入其他配置类。
- @ImportResource:用来加载xml配置文件。
- @Bean:放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
- @Inject:等价于默认的@Autowired,只是没有required属性;
参考了以下博客,特此感谢!
https://www.jianshu.com/p/686ecfc1a4b8
https://blog.csdn.net/qq_29347295/article/details/78709511