大家都知道这两个注解可以实现bean的注入
@Autowired 这个是spring的注解 org.springframework.beans.factory.annotation.Autowired
@Resource 这属于java自带的注解 javax.annotation.Resource
@Autowired默认是按照类型来注入的,默认情况下要求依赖对象必须存在。
如果允许依赖对象为null,需设置required属性为false,
需要按名字注入的话可以跟@Qualifier搭配使用
@Resource是按照里面的name属性来注入的
如果没有指定name (java项目源码www.fhadmin.org)
当注解在字段上时,默认取name=字段名称装配。
当注解在setter方法上时,默认取name=属性名称装配。
当按照名称(by-name)装配未匹配时,按照类型(by-type)装配。
当显示指定name属性后,只能按照名称(by-name)装配。
@Resoure装配顺序
如果同时指定name和type属性,则找到唯一匹配的bean装配,未找到则抛异常;
如果指定name属性,则按照名称(by-name)装配,未找到则抛异常;
如果指定type属性,则按照类型(by-type)装配,未找到或者找到多个则抛异常;
既未指定name属性,又未指定type属性,则按照名称(by-name)装配;如果未找到,则按照类型(by-type)装配。
对比一下
对比项 | @Autowire | @Resource |
---|---|---|
注解来源 | Spring注解 | JDK注解(JSR-250标准注解,属于J2EE) |
装配方式 | 优先按类型 | 优先按名称 |
属性 | required | name、type |
作用范围 | 字段、setter方法、构造器 | 字段、setter方法 |
推荐使用@Resource
注解属于J2EE,减少与Spring耦合