相同点:都可以装配Bean,都可以写在字段上,或写在setter方法上。
不同点:
@Resource 由jdk提供
@Autowired 由spring提供
import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.Resource;
@Autowired//默认按type注入
@Qualifier("cusInfoService")//一般作为@Autowired()的修饰用
@Resource(name="cusInfoService")//默认按name注入,可以通过name和type属性进行选择性注入
一般@Autowired和@Qualifier一起用,@Resource单独用。
@Autowired(注解是属于spring的)默认按照类型装配,这个,默认情况下必须要求以来的对象必须存在,如果要允许Null值,可以设置它的required属性为false,如果需要按照name装配,则需要@Qualifier注解一起使用
@Resource(这个注解是属于J2EE),默认按照名称进行装配(<bean id="query" class="QueryWithCache"></bean> 按名称query来配置 ),可以配置name和type指定按照类型还是名称注入
@Autowired 按照byType的方式自动注入,再去byName
@Resource 默认按照byName自动注入
1.装配顺序如果同时指定了Name和Type,则spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2.如果指定了name,则从上下文中查找名称id匹配的Bean进行装配,找不到则抛出一场
3.如果指定了type,则从上下文找到类型匹配的bean进行装配,找不到或者找到多个,都会抛出异常。
4.如果没有指定name,又没有指定type,则自行按照byName的方式进行装配。如果没有匹配,则退回一个原始类型进行匹配,如果匹配则自动装配