spring自动装配Bean属性

spring提供了3种类型的自动装配

  • byName:把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中。
  • byType:把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中。
  • constructor:把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean的对应属性中。

byName自动装配


	<bean id="roles" class="cn.com.ztz.spring.model.Roles" autowire="byName">
		<property name="id" value="1"/>
		<property name="roleName" value="管理员"/>
		<!-- 可以不需要用ref去关联bean了 -->
		<!-- <property name="users" ref="users"/> -->
	</bean>
	<bean id="users" class="cn.com.ztz.spring.model.Users">
		<property name="id" value="2"/>
		<property name="name" value="张三"/>
	</bean>

byName自动装配遵循一项约定:为属性自动装配ID与该属性名字相同的Bean,通过设置autowire="byName"来自动装配。

byType自动装配


	<bean id="roles" class="cn.com.ztz.spring.model.Roles" autowire="byType">
		<property name="id" value="1"/>
		<property name="roleName" value="管理员"/>
		<!-- 可以不需要用ref去关联bean了 -->
		<!-- <property name="users" ref="users"/> -->
	</bean>
	<!-- 删除掉Bean的id,也可以正确装配 -->
	<bean class="cn.com.ztz.spring.model.Users">
		<property name="id" value="2"/>
		<property name="name" value="张三"/>
	</bean>

byType自动装配存在一个局限性:如果Spring寻找到多个Bean,他们的类型与需要自动装配的属性类型都相匹配,怎么办?Spring提供另外两种选择,可以为自动装配标识一个首选Bean,或者取消某个Bean自动装配的候选资格。
为自动装配标识一个首选Bean,可以使用<bean>元素primary属性,primary属性默认值是true,这就意味着不存在首选Bean。我们可以把别的Bean的primary设置false来达到效果。
为自动装配排除一个Bean,可以使用<bean>元素的autowire-candidate属性,设置值为false。


constructor自动装配


	<bean id="roles" class="cn.com.ztz.spring.model.Roles" autowire="constructor">
		<constructor-arg name="id" value="1"/>
		<constructor-arg name="roleName" value="管理员"/>
		<!-- 可以不需要用ref去关联bean了 -->
		<!-- <constructor-arg name="users" ref="users"/> -->
	</bean>
	<!-- 删除掉Bean的id,也可以正确装配 -->
	<bean class="cn.com.ztz.spring.model.Users">
		<constructor-arg name="id" value="2"/>
		<constructor-arg name="name" value="张三"/>
	</bean>

constructor自动装配跟byType自动装配有相同的局限性。当发现多个Bean匹配某个构造器的入参,Spring也不会去尝试哪个构造器更适合使用。


默认自动装配


如果需要为Spring应用上下文的每一个Bean配置相同的autowire属性,那么我们可以在<beans>元素增加一个default-autowire属性。


警告:在实际开发中,虽然自动装配能使我们开发速度变快,但是在维护中需要花费很多的时间,所以我建议还是显示的装配比较好。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值