第二章 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