【spring框架9】AutoWire自動裝配
阿新 • • 發佈:2018-12-12
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u013517797/article/details/43835637
看我們配置的beans.xml:
<?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 id="userDao" class="cn.edu.hpu.dao.Impl.UserDaoImpl"> <property name="daoId" value="1"></property> </bean> <bean id="userDao2" class="cn.edu.hpu.dao.Impl.UserDaoImpl"> <property name="daoId" value="2"></property> </bean> <bean id="userService" class="cn.edu.hpu.service.UserService" > <property name="userDao" ref="u" /> </bean> </beans>
在預設的情況下,我們會手動設定userService所引用的bean:<property name="userDao" ref="u" />,但是我們也可以不指定,由spring來幫我們自動確定,這個叫做AutoWire,自動裝配。 設定方法:
<bean id="userService" class="cn.edu.hpu.service.UserService" scope="prototype" autowire="default">
</bean>
即在bean屬性欄里加 autowire="XXX"的屬性, autowire有以下幾個引數可以設定: no、byType、byName、default(常用的是這四個) 預設的是no,即需要手動來設定。 byName是按照名字去匹配。 byType是按照型別去匹配。 default是指定你在<beans...中設定的 default-autowire="XXX" byName測試: beans.xml中設定:
<bean id="userService" class="cn.edu.hpu.service.UserService" scope="prototype" autowire="byName">
</bean>
UserDaoImpl.java:
package cn.edu.hpu.dao.Impl; import java.util.List; import java.util.Map; import java.util.Set; import cn.edu.hpu.dao.UserDao; import cn.edu.hpu.model.User; public class UserDaoImpl implements UserDao{ private int daoId; public int getDaoId() { return daoId; } public void setDaoId(int daoId) { this.daoId = daoId; } public void save(User u) { System.out.println("add success!!"); } @Override public String toString() { return "daoid="+daoId; } }
改寫了toString方法,列印daoId,看看下面注入了哪個UserDao 測試:
@Test
public void testAdd() throws Exception{
BeanFactory ctx=new ClassPathXmlApplicationContext("beans.xml");
UserService userService=(UserService)ctx.getBean("userService");
System.out.println(userService.getUserDao());
}
結果: daoid=1 也就是spring按照名字匹配上了<bean id="userDao"...那一項。(大概是按測試類裡的UserDao類名來匹配的) byType測試: beans.xml中設定:
<?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 id="userDao2" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
<property name="daoId" value="2"></property>
</bean>
<bean id="userService" class="cn.edu.hpu.service.UserService" autowire="byType">
</bean>
</beans>
UserDaoImpl.java:
package cn.edu.hpu.dao.Impl;
import java.util.List;
import java.util.Map;
import java.util.Set;
import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;
public class UserDaoImpl implements UserDao{
private int daoId;
public int getDaoId() {
return daoId;
}
public void setDaoId(int daoId) {
this.daoId = daoId;
}
public void save(User u) {
System.out.println("add success!!");
}
@Override
public String toString() {
return "daoid="+daoId;
}
}
改寫了toString方法,列印daoId,看看下面注入了哪個UserDao 測試:
@Test
public void testAdd() throws Exception{
BeanFactory ctx=new ClassPathXmlApplicationContext("beans.xml");
UserService userService=(UserService)ctx.getBean("userService");
System.out.println(userService.getUserDao());
}
結果: daoid=2
也就是spring按照型別匹配上了<bean id="userDao2"...那一項。(大概是按測試類裡的UserDao型別匹配的)