点个关注,必回关
注解用法
1、@Autowired注解用法
spring中对构造方法、成员变量、方法参数进行标注。能够根据对象的类型完成自动注入
public class Service {
//构造方法注入
@Autowired
public Service(Service service){
this.service = service;
}
//成员变量注入
@Autowired
private Service service;
//方法参数注入
@Autowired
public void setService(Service service){
this.service = service;
}
}
2、@Resource注解用法
遵循了JSR-250规范,是JDK1.6以上加入的一个新特性。
public class Service {
@Resource(name = "service1")
private Service service1;
@Resource(name = "service2"
private Service service2
@Resource
private Service service3;
@Resource
private Service service4;
}
小知识:
@Resource注解:适用于所有的Java框架
@Autowired注解:只适用于Spring
@Resource能够支持对象类型注入,也能够支持对象名称注入
@Autowired和@Resource的区别
1、注解内部定义的参数不同
@Autowired只包含一个required参数(默认是“true”,表示开启自动注入)
@Resource包含七个参数(最重要的两个:name、type)
2、装配方式的默认值不同
@Autowired:按type自动装配
@Resource:默认按name自动装配(也可以指定name或者type进行自动装配)
3、注解应用的范围不同
@Autowired能够用在构造方法、成员变量、方法参数上,以及注解上
@Resource能够用在成员变量和方法参数上
4、出处不同
@Autowired在定义在spring中
@Resource定义在JDK中
5、装载顺序不同
@Autowired:
1、spring先找类型为users的bean 2、如果存在且唯一,则OK
3、如果不唯一,寻找name为users的bean。因为bean的name有唯一性,所以,到这里应该能确定是否存在满足要求的bean了
@Autowired也可以手动指定按照byName方式注入,使用@Qualifier标签,例如: @Autowired()
@Qualifier(“users” )
出现多个bean
<bean id="CustomerBean" class="demo3.Po.Customer">
<property name="type" value="1"/>
<property name="action" value="buy"/>
</bean>
<bean id="PersonBean1" class="demo3.Po.Person">
<property name="name" value="xiaoqiang"/>
<property name="address" value="Hongkong"/>
<property name="age" value="18"/>
</bean>
<bean id="PersonBean2" class="demo3.Po.Person">
<property name="name" value="xiaoming" />
<property name="address" value="Malaisia" />
<property name="age" value="28" />
</bean>
@Autowired
@Qualifier("PersonBean2") //选择要装配的bean
private Person person;
private int type;
private String action;
@Resource:
@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;