在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
<?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的方式自动装配,否则,则使用构造方法进行自动装配