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属性。

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 23:29:39

spring自动装配Bean属性的相关文章

Spring 自动装配 Bean

Spring3系列8- Spring 自动装配 Bean 1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiring ‘byType 4.      Auto-Wiring ‘constructor’ 5.      Auto-Wiring ‘autodetect’ Spring Auto-Wiring Beans——Spring自动装配Bean 所谓自动装配,就是将一个Bean注入到其他Bean的Prope

Spring基础系列8 -- Spring自动装配bean

Spring基础系列8 -- Spring自动装配bean 转载:http://www.cnblogs.com/leiOOlei/p/3548290.html 1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiring ‘byType 4.      Auto-Wiring ‘constructor’ 5.      Auto-Wiring ‘autodetect’ Spring Auto-Wiring Be

Spring自动装配Bean详解

1.      Auto-Wiring 'no' 2.      Auto-Wiring 'byName' 3.      Auto-Wiring 'byType 4.      Auto-Wiring 'constructor' 5.      Auto-Wiring 'autodetect' Spring Auto-Wiring Beans--Spring自动装配Bean 所谓自动装配,就是将一个Bean注入到其他Bean的Property中,类似于以下: <bean id="cust

Spring自动装配Bean的五种方式

在Spring中,支持 5 自动装配模式. no – 缺省情况下,自动配置是通过"ref"属性手动设定,在项目中最常用byName – 根据属性名称自动装配.如果一个bean的名称和其他bean属性的名称是一样的,将会自装配它.byType – 按数据类型自动装配.如果一个bean的数据类型是用其它bean属性的数据类型,兼容并自动装配它.constructor – 在构造函数参数的byType方式.autodetect – 如果找到默认的构造函数,使用"自动装配用构造&qu

spring 自动装配 bean 有哪些方式?

Spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系.作为开发人员,我们需要告诉Spring要创建哪些bean并且如何将其装配到一起. spring中bean装配有两种方式 隐式的bean发现机制和自动装配 在java代码或者XML中进行显示配置 参考链接:spring Bean装配的几种方式简单介绍 原文地址:https://www.cnblogs.com/jxxblogs/p/12147464.html

spring自动装配

spring提供了自动装配(autowiring)和自动检测(autodiscovery)用来减少XML的配置数量. 自动装配bean属性 byName——把与Bean的属性具有相同名字(或ID)的其他Bean自动装配到Bean的对应属性中. 示例: import com.springinaction.springdol.Instrumentalist; public class Instrumentalist{ private String song; private Object instr

Spring3- Spring 自动装配 Bean

Spring3- Spring 自动装配 Bean Spring Auto-Wiring Beans——Spring自动装配Bean 所谓自动装配,就是将一个Bean注入到其他Bean的Property中,类似于以下: <bean id="customer" class="com.lei.common.Customer" autowire="byName" /> Spring支持5种自动装配模式,如下: no          ——默

Spring -- Bean自动装配&amp;Bean之间关系&amp;Bean的作用域

Bean的自动装配 Spring IOC 容器可以自动装配 Bean. 需要做的仅仅是在 的 autowire 属性里指定自动装配的模式 有以下几种自动装配的类型: byType(根据类型自动装配): 若 IOC 容器中有多个与目标 Bean 类型一致的 Bean. 在这种情况下, Spring 将无法判定哪个 Bean 最合适该属性, 所以不能执行自动装配. byName(根据名称自动装配): 必须将目标 Bean 的名称和属性名设置的完全相同. constructor(通过构造器自动装配):

Spring4-自动装配Beans-按属性的数据类型自动装配Bean

1.创建Maven项目,项目名称springdemo16,如图所示 2.配置Maven,修改项目中的pom.xml文件,修改内容如下 <project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0