spring的自动装配和精确装配

spring提供了@Autowired Annotation来指定自动装配,使用@Autowired可以标注setter方法、普通方法、Field、函数形参和构造器等。

例如下代码:

 1 package cn.zj.qiao.spring.beans;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Component;
 5 
 6 import cn.zj.qiao.spring.interfaces.Axe;
 7 import cn.zj.qiao.spring.interfaces.Person;
 8 
 9 @Component
10 public class Chinese implements Person {
11     
12     private Axe axe;
13     
14     @Autowired
15     public void setAxe(Axe axe){
16         this.axe = axe;
17     }
18     public Axe getAxe(){
19         return axe;
20     }
21 
22     @Override
23     public void useAxe() {
24         System.out.println(axe.chop());
25     }
26 
27 }

上面的代码使用@Autowired 指定setAxe()方法进行自动装配,spring将会自动搜索容器中类型为Axe的Bean实例,并将该Bean实例作为setAxe()方法的参数传入,此时spring默认的装配策略为byType。同样的@Autowired可以修饰普通的方法,Field和构造器等,且其默认的装配策略均为byType类型的装配。

为了实现精确的自动装配,spring提供了@Qualifier Annotation,通过使用@Qualifier,允许根据Bean的标识来指定自动装配,如下代码所示:

 1 package cn.zj.qiao.spring.beans;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.beans.factory.annotation.Qualifier;
 5 import org.springframework.stereotype.Component;
 6 
 7 import cn.zj.qiao.spring.interfaces.Axe;
 8 import cn.zj.qiao.spring.interfaces.Person;
 9 
10 @Component
11 public class Chinese implements Person {
12     
13     @Autowired
14     @Qualifier("steelAxe")
15     private Axe axe;
16     
17     public void setAxe(Axe axe){
18         this.axe = axe;
19     }
20     public Axe getAxe(){
21         return axe;
22     }
23 
24     @Override
25     public void useAxe() {
26         System.out.println(axe.chop());
27     }
28 
29 }

如上代码所示,Axe axe Field将使用自动装配,且精确的指定了被装配Bean的实例的名称是steelAxe。

posted on 2012-09-25 09:56  幸福从不迟疑  阅读(2814)  评论(0编辑  收藏  举报