spring之使用@Autowired和@Resource自动装配Bean(2)

spring之使用@Autowired和@Resource自动装配Bean(2)

----------

 

 

自动装配具有兼容类型的单个Bean

 

可以给特定的属性添加@Autowired注解,Spring将会对它进行自动装配。例如,可以给prefixGenerator属性的setter方法加上@Autowired注解。此时,Spring将会试着装配类型与PrefixGenerator兼容的Bean。

 

package com.apress.springrecipes.sequence;
import org.springframework.beans.factory.annotation.Autowired;
public class SequenceGenerator{
	...
	@Autowired
	public void setPrefixGenerator(PrefixGenerator prefixGenerator){
		this.prefixGenerator = prefixGenerator;
	}
}

 

如果在IOC容器里存在一个类型与PrefixGenerator兼容的Bean,它将会被自动设置给prefixGenerator属性。

<beans ...>
	...
	<bean id="sequenceGenerator" class="com.apress.springrecipes.
		sequence.SequenceGenerator">
		<property name="initial" value="100000"/>
		<property name="suffix" value="A"/>
	</bean>
	<bean id="datePrefixGenerator" class="com.apress.springrecipes.sequence.
		DatePrefixGenerator">
		<property name="pattern" value="yyyyMMdd"/>
	</bean>
</beans>

 默认情况下,所有应用了@Autowired注解的属性都需要被设置。当Spring找不到匹配的Bean装配属性时, 将会抛出异常。如果某一属性并不一定需要被设置,那么可以设置@Autowired的required属性为false.此时,如果Spring不能找到匹配的Bean,该属性将不被设置

package com.apress.springrecipes.sequence;
import org.springframework.beans.factory.annotation.Autowired;
public class SequenceGenerator{
	...
	@Autowired(requered=false)
	public void setPrefixGenerator(PrefixGenerator prefixGenerator){
		this.prefixGenerator = prefixGenerator;
	}
}

除了setter方法之外,构造器也可以使用@Autowired注解。此时,Spring将试着为构造器的每个参数找出类型兼容的Bean. 

package com.apress.springrecipes.sequence;
import org.springframework.beans.factory.annotation.Autowired;
public class SequenceGenerator{
	...
	@Autowired
	public SequenceGenerator(PrefixGenerator prefixGenerator){
		this.prefixGenerator = prefixGenerator;
	}
}

 即使没有声明public,字段也一样可以使用@Autowired注解。在这种情况下,可以不用为该字段声明setter方法或构造器。Spring将通过反射为该字段注入匹配的Bean,不过,因为难以单元测试,所以给非公共字段添加@Autowired注解会降低代码的可测试性。

package com.apress.springrecipes.sequence;
import org.springframework.beans.factory.annotation.Autowired;
public class SequenceGenerator{
	@Autowired
	private PrefixGenerator prefixGenerator;
	....
}

甚至可以在具有任意个参数和任意名称的方法上应用@Autowired注解。此时,Spring将试着给每个方法参数装配类型兼容的Bean。 

package com.apress.springrecipes.sequence;
import org.springframework.beans.factory.annotation.Autowired;
public class SequenceGenerator{
	....
	@Autowired
	public void inject(PrefixGenerator prefixGenerator){
		this.prefixGenerator = prefixGenerator;
	}
}

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值