说明:
(1)在【Spring IoC容器与Bean管理21:使用注解方式实现Spring IoC二:组件类型注解(对象实例化);@Repository,@Service,@Controller,@Component;】中,仅仅介绍了实例化对象,但是没有涉及为对象的属性注入数据;本博客中介绍的【自动装配注解】,其目的就是实现对象的依赖注入;
(2)【自动装配注解】包括【按类型装配注解】和【按名称装配注解】;
(3)本篇博客主要介绍以【@Autowired】注解为例,介绍【自动装配注解】中的【按类型装配注解】的使用和缺点;
(3)本篇博客,沿用【Spring IoC容器与Bean管理21:使用注解方式实现Spring IoC二:组件类型注解(对象实例化);@Repository,@Service,@Controller,@Component;】中的代码s08;
目录
1.【按类型装配】的注解:@Autowired和@Inject:
2.【按名称装配】的注解:@Named和@Resource:
二:自动装配注解:之【按类型装配】注解:之@Autowired注解
1.@Autowired注解用法:【在属性上使用@Autowired注解】和【在set方法上使用@Autowired注解】
策略二:在setUserDao()方法上使用@Autowired注解
(1)演示:为什么,在工作中,不推荐使用【按类型装配注解】;
(2)使用【按类型装配注解】,如何解决【由于IoC容器中出现多个相同类型的对象,从而导致的NoUniqueBeanDefinitionException】的问题?
一:自动装配注解简介
0.【按类型装配】注解和【按名称装配】注解简述:
● 【按名称装配】:在【Spring IoC容器与Bean管理12:IoC在项目中的作用;】中的s04项目为例:
在绝大多数场景下,我们都是采用【按名称装配】的策略;
●【按类型装配】:不需要关心在IoC容器中,bean的名称是什么;在运行过程中为属性注入值时,只需要从IoC容器中获取对应类型的对象,然后完成自定注入;
1.【按类型装配】的注解:@Autowired和@Inject:
● @Autowired:这个是Spring提供的,即这是Spring自己提供的规范;
● @Inject:由JSR-330(Java规范要求第330号文件,这个文件是Java领域的标准和业界的规范)提供的标准;自然Spring对JSR-330也提供了支持;
● @Autowired和@Inject这两个【按类型装配】的注解,不推荐使用;更多的时候,鼓励使用【按名称装配】的注解;
2.【按名称装配】的注解:@Named和@Resource:
● @Named:这个注解要和@Inject注解匹配使用;即在@Inject注解后,增加@Named注解,其会按照属性名(或者其他自定义的规则)完成对象的装配;同时@Named也是JSR-330(Java规范要求第330号文件,这个文件是Java领域的标准和业界的规范)提供的标准
● @Resource:这个注解出现的较早,是JSR-250提供的标准;这个注解不但可以按照名称进行依赖注入,如果不满足按名称进行依赖注入时,其也能自动按类型装配;