第二章 IoC Setter注入
Setter注入又稱為屬性注入。是通過屬性的setXXX()方法來注入Bean的屬性值或依賴對象。由於Setter注入具有可選擇性和靈活性高的優點,因此Setter注入是實際應用中最常用的注入方式。
ref的方式
a、使用2.2的例子中的UserDao與UserDaoImpl
- public interface UserDao {
- public void save();
- }
- public class UserDaoImpl implements UserDao {
- public void save() {
- System.out.println("保存用戶...");
- }
- }
b、創建UserService接口及其實現類UserServiceImpl
public interface UserService {
public void addUser();
}
public class UserServiceImpl implements UserService {
/*
* 在service層使用dao層的接口對象
* 接口對象必須有其setter方法,以供運行期spring注入值
*/
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void addUser() {
userDao.save();
}
}
c、將UserDaoImpl與UserServiceImpl交由Spring管理
<bean ></bean> <!-- property是UserServiceImpl中的屬性設置,這些屬性必須有setter方法。name是屬性的名字,與類中的名字相同。ref是引用,引用的是上麵配置好的UserDaoImpl的name --> <bean > <property name="userDao" ref="userDao"></property> </bean>
d、測試
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
UserService userService = (UserService) context.getBean("userService");
userService.addUser();
注入內部Bean
注入內部Bean其實也是ref的方式基本一樣,隻是在配置的時候不大相同而已。UserDaoImpl不再需要作為單獨的Bean交由Spring管理,而是作為UserServiceImpl的一部分來進行配置。
配置:
<!-- property是UserServiceImpl中的屬性設置,這些屬性必須有setter方法。name是屬性的名字,與類中的名字相同。Bean是屬性對象所屬的類的完整類名 --> <bean > <property name="userDao"> <bean ></bean> </property> </bean>
注入基本類型
如:UserService中有一個String類型的字符串username:
public class UserServiceImpl implements UserService {
private UserDao userDao;
private String username;
public void setUsername(String username) {
this.username = username;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void addUser() {
System.out.println(username);
userDao.save();
}
}
配置:
<bean > <property name="userDao"> <bean ></bean> </property> <property name="username" value="zhangsan"></property> </bean>
注入集合
a、List和Set
類中有一個集合屬性及其setter方法。
private Set<String> usernames;
public void setUsernames(Set<String usernames){
this.usernames = usernames;
}
配置:
<property name="usernames"> <list> <value>aaa</value> <value>bbb</value> <value>ccc</value> </list> </property>
或者:
<property name=" usernames"> <set> <value>aaa</value> <value>bbb</value> <value>ccc</value> </set> </property>
b、Map
類中的屬性:
private Map<Integer, String> map;
public void setMap(Map<Integer, String> map) {
this.map = map;
}
配置:
<property name="map"> <map> <entry key="1"> <value>aaa</value> </entry> <entry key="2"> <value>bbb</value> </entry> </map> </property>
c、Properties
Properties類型其實可以看成是Map類型的一種。Properties的鍵和值都隻能是字符串。
類中的屬性:
private Properties mails;
public void setMails(Properties mails) {
this.mails = mails;
}
配置:
<property name="mails"> <props> <prop key="mailOfZhang">zhangsan_2013@163.com</prop> <prop key="mailOfLi">Lixiaolong_abcxx@qq.com</prop> </props> </property>
最後更新:2017-04-03 18:52:12