Spring Beans 自动装配
文章目录
- Spring Beans 自动装配
- Spring 自动装配 `byName`
- Spring 自动装配 `byType`
- Spring 由构造函数自动装配
Spring Beans 自动装配
使用元素的 autowire 属性为一个 bean 定义指定自动装配模式。
Spring 自动装配 byName
这种模式由属性名称指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 auto-wire 属性设置为 byName。然后,它尝试将它的属性与配置文件中定义为相同名称的 beans 进行匹配和连接。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。
User
public class User {
private String uname;
private Address address;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
Address
public class Address {
private String addr;
private String tel;
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
配置
<?xml version=”1.0” encoding=”UTF-8”?>
测试
@Test
public void demo01(){
String xmlPath = "auto.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
User user = (User) applicationContext.getBean("userId");
System.out.println(user.getUname());
System.out.println(user.getAddress().getAddr());
System.out.println(user.getAddress().getTel());
}
Spring 自动装配 byType
这种模式由属性类型指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType。然后,如果它的 type 恰好与配置文件中 beans 名称中的一个相匹配,它将尝试匹配和连接它的属性。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。
配置
<?xml version=”1.0” encoding=”UTF-8”?>
<!-- 需要包含 address 属性(即,它有一个 setAddress(...) 方法 -->
<bean id="userId" class="com.cc.study.auto.User"
autowire="byName">
<property name="uname" value="kevin" />
</bean>
<!-- 这里的bean id的值必须和User的address属性相同-->
<bean id="address" class="com.cc.study.auto.Address">
<property name="addr" value="北京" />
<property name="tel" value="110" />
</bean>
<bean id="userId2" class="com.cc.study.auto.User"
autowire="byType">
<property name="uname" value="kevin2" />
</bean>
</beans>
测试
@Test
public void demo02(){
String xmlPath = "auto.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
User user = (User) applicationContext.getBean("userId2");
System.out.println(user.getUname());
System.out.println(user.getAddress().getAddr());
System.out.println(user.getAddress().getTel());
}
Spring 由构造函数自动装配
这种模式与 byType 非常相似,但它应用于构造器参数。Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 constructor。然后,它尝试把它的构造函数的参数与配置文件中 beans 名称中的一个进行匹配和连线。如果找到匹配项,它会注入这些 bean,否则,它会抛出异常。
User
public class User {
private String uname;
private Address address;
public User(){
}
public User(String uname,Address address){
this.uname = uname;
this.address = address;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
配置
<?xml version=”1.0” encoding=”UTF-8”?>
<!-- 需要包含 address 属性(即,它有一个 setAddress(...) 方法 -->
<bean id="userId" class="com.cc.study.auto.User"
autowire="byName">
<property name="uname" value="kevin" />
</bean>
<!-- 这里的bean id的值必须和User的address属性相同-->
<bean id="address" class="com.cc.study.auto.Address">
<property name="addr" value="北京" />
<property name="tel" value="110" />
</bean>
<bean id="userId2" class="com.cc.study.auto.User"
autowire="byType">
<property name="uname" value="kevin2" />
</bean>
<bean id="userId3" class="com.cc.study.auto.User" autowire="constructor">
<constructor-arg value="kevin3"/>
</bean>
</beans>
测试
@Test
public void demo03(){
String xmlPath = "auto.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
User user = (User) applicationContext.getBean("userId3");
System.out.println(user.getUname());
System.out.println(user.getAddress().getAddr());
System.out.println(user.getAddress().getTel());
}
还没有评论,来说两句吧...