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。

转载于:https://www.cnblogs.com/binger/archive/2012/09/25/2701099.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值