可以通过在配置文件的bean的autowire属性指定自动装配的类型:
no: 不自动装配
byName: 根据setter的名字找对应的bean自动装配
byType: 根据setter的类型找bean自动装配
constructor: 根据构造方法中的类型,找类型相同的bean,调用该构造方法进行装配。
使用构造方法进行装配的示例:
package cn.edu.tju.domain;
public class BookBasicInfo {
private String name;
private String author;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
package cn.edu.tju.domain;
public class BookEntity {
private BookBasicInfo bookBasicInfo;
private int count;
private String bookType;
public BookBasicInfo getBookBasicInfo() {
return bookBasicInfo;
}
public void setBookBasicInfo(BookBasicInfo bookBasicInfo) {
this.bookBasicInfo = bookBasicInfo;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getBookType() {
return bookType;
}
public void setBookType(String bookType) {
this.bookType = bookType;
}
public BookEntity(){
}
public BookEntity(BookBasicInfo bookBasicInfo, int count, String bookType) {
this.bookBasicInfo = bookBasicInfo;
this.count = count;
this.bookType = bookType;
}
public BookEntity(BookBasicInfo bookBasicInfo) {
this.bookBasicInfo = bookBasicInfo;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bookBasicInfo" class="cn.edu.tju.domain.BookBasicInfo">
<property name="name" value="java in action"/>
<property name="author" value="james gosling"/>
</bean>
<bean id="bookEntity" class="cn.edu.tju.domain.BookEntity" autowire="constructor">
<property name="bookType" value="compute"/>
<property name="count" value="1000"/>
</bean>
</beans>
package cn.edu.tju;
import cn.edu.tju.domain.*;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.support.GenericApplicationContext;
public class Start12 {
public static void main(String[] args) {
GenericApplicationContext context = new GenericApplicationContext();
new XmlBeanDefinitionReader(context).loadBeanDefinitions("beans9.xml");
context.refresh();
BookEntity test = (BookEntity) context.getBean("bookEntity");
System.out.println(test.getBookType());
System.out.println(test.getCount());
System.out.println(test.getBookBasicInfo().getAuthor());
}
}