Spring基础(11)——自动装配

自动装配类型:byname、bytype、constructor、autodetect

1、byname

根据属性名进行自动装配。此选项检查容器并根据名称查找与属性完全一致的bean,并将其与属性自动装配。

使用byname自动装配类型时,对于设置的属性名字必须提供set方法,否则在启动Spring容器时,将会报出异常。

package autowire;
public class People {
  String name;
  int age;
  Action action;
  public void setAction(Action action) {
    this.action = action;
  }

  public Action getAction() {
    return this.action;
  }
  // 省略。。。
}
<bean id="action" class="autowire.Action">
  <property name="actionName" value="eat">
</bean>

<bean id="people" class="autowire.People" autowire="byName">
  <property name="name" value="eat">
  <property name="age" value="24">
</bean>

2、bytype

如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动匹配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用bytype方式进行装配。如果没有找到相匹配的bean,则什么事都不会发生,属性也不会被设置。如果不希望这样,那么可以通过设置dependency-check="objects"使Spring抛出异常。

上面的例子改成autowire="byType"依然可以正常执行。

如果有A、B两个类,两者满足一下三种情况的任意一种,都可以称为A匹配与B

A和B是相同的类型、A是B的子类、A实现了B的接口

如果bean采用bytype进行自动装配,当IOC容器中存在多个类型匹配的bean时,因为无法判断究竟选择哪个bean作为自动装配的目标,Spring将会抛出异常unsatisfied-dependencyexception。

3、constructor

与bytype类似,不同之处在于应用于构造参数。如果在容器中没有找到与构造器参数类型一直的bean,那么将会抛出异常。

public People(String name, int age, Action action) {
  this.name = name;
  this.age = age;
  this.action = action
}
<bean id="action" class="autowire.Action">
  <property name="actionName" value="eat">
</bean>

<bean id="people" class="autowire.People" autowire="constructor">
  <constructor-arg index="0" value="eat">
  <constructor-arg index="1" value="24">
</bean>

4、autodetect

通过bean类的自省机制决定使用contructor还是bytype进行自动装配。如果发现默认构造器,那么将使用bytype方式。

自动装配控制:

可以将bean元素的autowire-candidate属性设为false,这样容器在查找自动装配的对象时,将不考虑该bean。

另一个是通过对bean的id属性进行模式匹配,对自动装配进行限制。通过设置beans元素的default-auto-candidates属性进行设置。如果限制名字以2结尾的bean,那么可以设置为"*2",表示名字为2结尾的bean将不作为候选者进行自动装配。

如果bean显示的将autowire-candidate属性设置为ture或false,容器在自动装配的时候优先采用该属性的设置,而模式匹配将不起作用。排除后的bean可以继续使用自动装配来注入到其他的bean,但是不能作为其他bean自动装配的候选者。

默认自动装配:

Spring通过<beans>元素的default-autowire属性可以设置其下的bean的自动装配模式,no表示不启动自动装配。bean中定义的autowire属性会覆盖通过beans设置的自动装配属性。

在Bean中设置primary属性为true,该bean设置为首选自动装配bean。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值