Spring揭秘(七)——基于注解的依赖注入

基于注解的依赖注入

Spring2.5提供的基于注解的依赖注入功能延续了Spring框架内在IoC容器设计与实现上的一致性。除了依赖关系的“表达“方式上的不同,底层的实现机制基本上保持一致。


自动绑定autowire

在使用依赖注入绑定相关实现类时,为了减少配置量,我们可以采用Spring的IoC容器提供的自动绑定功能。而将自动绑定的标志用注解来表示时,也就得到了基于注解的依赖注入,或者更确切的称为基于注解的自动绑定。接下来我们先来了解下自动绑定。

除了可以通过配置明确地指定bean之间的依赖关系,Spring还提供了根据bean定义的某些特点将相互依赖的某些bean直接自动绑定的功能。通过的autowire属性,可以指定当前bean定义采用某种类型的自动绑定模式。

Spring提供了5中自动绑定模式,即nobyNamebyTypeconstructorautodetect

  • no
    容器默认的绑定方式,也就是不采用任何形式的自动绑定,完全依赖于手工明确配置各个bean之间的依赖关系。

  • byName
    根据类中声明的实例变量的名称,与XML配置文件中的bean定义的beanName的之进行匹配,相匹配的bean定义将被自动绑定到当前实例变量上。假设我们有如下所示的类定义:

public class Foo {

  private Bar emphasisAttribute;
  ...

  //相应的setter方法定义
}
public class Bar{
 //
}

那么应该使用如下代码所演示的自动绑定定义,才能达到预期的目的:

<bean id="fooBean" class="...Foo" autowire="byName"></bean>
<bean id="emphasisAttribute" class="...Bar"></bean>
  • byType
    容器会根据当前bean定义类型,分析其相应的依赖对象类型,然后到容器所管理的所有bean定义中寻找与依赖对象类型相同的bean定义,然后将找到的符合条件的bean自动绑定到当前bean定义。如果没有找到,则不做设置。但如果找到多个,容器会告诉你它解决不了“该选用哪一个“的问题,你只好自己查找原因,并自己修正该问题。
<bean id="fooBean" class="...Foo" autowire="byType"></bean>
<bean id="emphasisAttribute" class="...Bar"></bean>
  • constructor
    byName和byType类型的自动绑定模式上针对property的自动绑定,而constructor类型则是针对构造方法参数的类型而进行的自动绑定,它同样是byType类型的绑定模式。
public class Foo{
 private Bar bar;
 public Foo(Bar bar) {
   this.bar = bar;
 }
}

相应配置为:

<bean id="foo" class="...Foo" autowire="constructor"></bean>
<bean id="bar" class="...Bar"></bean>
  • autodetect
    这种模式是byType和constructor模式的结合体,如果对象拥有默认无参数的构造方法,容器会优先考虑byType的自动绑定模式。否则,会使用constructor模式。当然,如果通过构造方法注入绑定后还有其他属性没用绑定,容器也会使用byType对剩余的对象属性进行自动绑定。

⚠️:
1. 手动明确指定的绑定关系会覆盖自动绑定模式的行为
2. 自动绑定值应用于“原生类型、String类型及Classes类型“以为的对象类型。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值