@Autowired可以帮我们注入一个属性,一般作用在普通方法之上(也可以作用的变量上或者构造器上)
@Autowired是根据类型匹配的,所以如果有两个一样类型的参数的时候,会出错
看下下面的例子
public class Bean2 {
@Override
public String toString() {
return "bean2....";
}
}
public class Bean1 {
private Bean2 bean2;
public Bean2 getBean2() {
return bean2;
}
@Autowired
public void setBean2(Bean2 bean2) {
this.bean2 = bean2;
}
public String toString() {
return "bean1....";
}
}这是一个Bean,在Bean1里有一个属性Bean2,这是利用@Autowired来注入这个属性
相应的xml定义如下
<!-- 使用这个扫描使用了注解的包,这样注解才会有用 --> <context:component-scan base-package="bean" /> <bean id="bean1" class="bean.Bean1"/> <bean id="bean2" class="bean.Bean2"/>接着是测试类
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean1 bean1 = (Bean1) ctx.getBean("bean1");
System.out.println(bean1);
}这时打印出来是bean2....
证明注入成功了
由于@Autowired是根据类型注入的,那么如果去掉xml文件中的id,也是可以注入成功
@Qualifier可以缩小匹配的范围
@Qualifier一般和@Autowired来配合使用,以此来解决使用@Autowired时有多个类型匹配的问题
使用方式如下(配置文件和测试代码和上面一样)
public class Bean1 {
private Bean2 bean2;
public Bean2 getBean2() {
return bean2;
}
@Autowired
@Qualifier("bean2")
public void setBean2(Bean2 bean2) {
this.bean2 = bean2;
}
public String toString() {
return "bean1....";
}
}对于多个参数的方法,如果需要注入,那么@Qualifier可以作用的参数前,这样就可以注入多个参数了
代码如下(Bean3和Bean2一样)
public class Bean1 {
private Bean2 bean2;
private Bean3 bean3;
public Bean2 getBean2() {
return bean2;
}
public Bean3 getBean3() {
return bean3;
}
@Autowired
public void set(@Qualifier("bean2") Bean2 bean2, @Qualifier("bean3") Bean3 bean3) {
this.bean2 = bean2;
this.bean3 = bean3;
}
public String toString() {
return "bean1....";
}
}在使用了@Autowired注入时,指定了名称为bean2的bean注入第一个参数,名称为bean3的bean注入第二个参数中,这样就可以注入多个参数了(bean3需要在xml文件中声明)
使用方式如下(其他代码和上面一样)
public class Bean1 {
private Bean2 bean2;
public Bean2 getBean2() {
return bean2;
}
@Resource(name = "bean2")
public void setBean2(Bean2 bean2) {
this.bean2 = bean2;
}
public String toString() {
return "bean1....";
}
}这样名称为bean2的bean就会注入
@Autowired和@Resource各有各的用法,如果要注入的方法中有多个参数,那么可以使用@Autowired,如果是其他情况,可以使用@Resource
Spring注解总结----@Autowired和@Qualifier、@Resource
原文地址:http://blog.csdn.net/u013160932/article/details/44750357