Spring XML配置自动装配的Bean

在java的大多数开源框架中,都是会使用xml文件惊醒配置框架在项目中的使用,这样对程序员的工作带来了诸多不便,sping也避免不了这样的问题,但是sping其中的自动装配却使我们在一定程度上减轻了对xml文件的配置。

下面创建两个基本的实体类:

User.java

package com.spr.model;

public class User {
	private String name;
	private String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
}
Students.java

package com.spr.model;

public class Student {
	private User user;
	private String clazz;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String getClazz() {
		return clazz;
	}
	public void setClazz(String clazz) {
		this.clazz = clazz;
	}
	
}

其中Students中含有User的引用。


一、通过类型自动装配Bean:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
					       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

	<bean name="student" class="com.spr.model.Student" autowire="byType">
		<property name="clazz" value="1-1" />
	</bean>

	<bean name="user" class="com.spr.model.User">
		<property name="name" value="yezi" />
		<property name="sex" value="男" />	
	</bean>

</beans>


因为bean student中没有配置user属性,并且在bean中配置了autowire="byType",所以spring会自动寻找类型为User的Bean,并为student自动配置,但是,通过类型自动配置时不能出现两个或两个以上的相同类型,这样程序会报org.springframework.beans.factory.UnsatisfiedDependencyException错误,提示配置了两个同类型的Bean


二、通过名称自动配置Bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
					       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

	<bean name="student" class="com.spr.model.Student" autowire="byName">
		<property name="clazz" value="1-1" />
	</bean>

	<bean name="users" class="com.spr.model.User">
		<property name="name" value="feier" />
		<property name="sex" value="女" />	
	</bean>
	
	<bean name="user" class="com.spr.model.User">
		<property name="name" value="yezi" />
		<property name="sex" value="男" />	
	</bean>

</beans>

现在配置文件中出现了两个User类型的Bean,但是student bean的自动配置参数指定的是byName,也就是说,sping要找到name或id为user的bean,并为student bean自动装配上5


三、通过构造函数自动装配:

在一部分的情况下我们会使用实体类的构造函数为其属性赋值,spring同样提供了构造函数的自动装配方式,

修改students.java

package com.spr.model;

public class Student {
	private User user;
	private String clazz;
	
	public Student(){	
	}
	public Student(User user){
		this.user = user;
	}
	
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String getClazz() {
		return clazz;
	}
	public void setClazz(String clazz) {
		this.clazz = clazz;
	}
	
}

配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
					       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

	<bean name="student" class="com.spr.model.Student" autowire="constructor">
		<property name="clazz" value="1-1" />
	</bean>

	<bean id="user" class="com.spr.model.User">
		<property name="name" value="yezi" />
		<property name="sex" value="男" />	
	</bean>

</beans>
构造函数的自动装配与通过类型自动装配方式相似,构造函数自动装配会查找类型与构造函数中参数类型相同的Bean,之后自动装配上。


四、自动选择通过类型装配还是通过构造方法装配

这个参数在spring3.0中已经被取消,如果想要使用就要把

 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd改为<pre name="code" class="html"> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
					       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

	<bean name="student" class="com.spr.model.Student" autowire="autodetect">
		<property name="clazz" value="1-1" />
	</bean>

	<bean id="user" class="com.spr.model.User">
		<property name="name" value="yezi" />
		<property name="sex" value="男" />	
	</bean>

</beans>


 
 


如果至少找到了一个没有参数的构造方法,spring就会使用byType的方式自动装配,否则,则使用构造方法进行自动装配


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值