Spring中以上三个注解可以用来实现依赖注入,但在使用时知道三者的区别与联系是比较重要的
一、@Resource使用注意事项
@Resource
PersonDao personDao;
1. 首先根据类名,将类名首字母小写得到personDao,然后去Spring的配置文件中寻找id为personDao的bean,即进行名称匹配
2.若Spring的配置文件中没有id为personDao的bean,则再根据类型进行匹配,在配置文件中寻找class为PersonDao 的bean
3.不支持搭配 @Qualifer指定bean名称使用
4.@Resource可以作用在变量、setter方法上。
二、@Autowired使用注意事项
@Autowired
PersonDao personDao;
1直接根据类型进行匹配,Spring会去配置文件中寻找class为PersonDao 的bean
2.@Autowired有个属性为required,可以配置为false,如果配置为false之后,当没有找到相应bean的时候,系统不会抛错;
3.@Autowired可以作用在变量、setter方法、构造函数上。
4.@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier;
@Qualifer使用注意事项
@Autowired
@Qualifer("personDao")
PersonDao personDao;
1@Qualifer不能单独使用,否则会出现空指针错误
2需要配合@Autowired使用,会从Spring配置文件中寻找id为personDao的bean,即进行名称匹配
三、@Inject使用注意事项
1、@Inject是JSR330 (Dependency Injection for Java)中的规范,需要导入javax.inject.Inject;实现注入。
2、@Inject是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Named;
3、@Inject可以作用在变量、setter方法、构造函数上。
@Named使用注意事项
@Named("XXX") 中的 XX是 Bean 的名称,所以 @Inject和 @Named结合使用时,自动注入的策略就从 byType 转变成 byName 了。