针对@Resource 和 @Autowired的区别,各大论坛上众说纷纭,
这里对这三个注解进行简单的分析
1、@Autowired
注入可以为空 required=false ;
可以和首选项注解@Primary注解配合使用 ;
可以通过@Qualifier注解指定bean的名称 ;
如果没有使用@Qualifier指定bean名称,则将被@Autowired注解的属性名作为Bean的名称
如果容器中存在多个名称不同类型相同的Bean, 被@Autowired注解的属性名在容器中不存在并且没有通过@Qualifier修饰
则抛出异常。
如果有通过@Qualifier修饰,如果value值在容器中不存在,即使同种类型只有一个对象,也抛出异常。
如果容器中一种类型只有一个对象 Bean , 即使属性名称在容器中不存在,也会默认获取容器中唯一的值。
可以注入泛型类型
2、@Resource
注入不可以为空
不可以和@Primary配合使用
可以通过name属性设置Bean的值
如果容器中存在多个值,
如果容器中存在多个名称不同类型相同的Bean, 被@Resource注解的属性名在容器中不存在并且没有添加name属性值则 抛出异常。
如果name注解属性值在容器中不存在,即使同种类型只有一个对象,也抛出异常。
如果容器中一种类型只有一个对象 Bean , 即使属性名称在容器中不存在,也会默认获取容器中唯一的值。
不可以注入泛型类型
3、@Inject
和@Autowried注解功能类似,唯一不同的是@Inject注解没有required属性,不可以为空
综合考虑,个人推荐使用@Autowired ,功能最全 , 和spring最兼容