還是使用上一個demo,現在我們探討一下構造注入的順序問題,下面只截取關鍵代碼。
1 package service.impl; 2
3 import service.UserService; 4 import dao.UserDao; 5 import entity.User; 6
7 /**
8 * 用戶業務類,實現對User功能的業務管理 9 */
10 public class UserServiceImpl implements UserService { 11
12 // 聲明接口類型的引用,和具體實現類解耦合
13 private UserDao dao; 14 private String s1; 15 private String s2; 16
17
18 // 生成無參構造方法
19 public UserServiceImpl() { 20
21 } 22
23 // 帶參數構造方法 為dao進行賦值
24 public UserServiceImpl(UserDao dao) { 25 this.dao = dao; 26 } 27 public UserServiceImpl(UserDao dao,String s1) { 28 this.dao = dao; 29 this.s1=s1; 30 } 31 public UserServiceImpl(String s2,UserDao dao) { 32 this.dao = dao; 33 this.s2=s2; 34 } 35
36
37 public UserDao getDao() { 38 return dao; 39 } 40
41 // dao 屬性的setter訪問器,會被Spring調用,實現設值注入
42 public void setDao(UserDao dao) { 43 this.dao = dao; 44 } 45
46 public void addNewUser(User user) { 47 // 調用用戶DAO的方法保存用戶信息
48 dao.save(user); 49 System.out.println("s1="+s1); 50 System.out.println("s2="+s2); 51 } 52 }
<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
<!--以上是Spring框架的頭信息 -->
<!--放置要被管理的對象實例 -->
<!-- 使用構造注入的方式 -->
<bean id="userDao" class="dao.impl.UserDaoImpl"></bean>
<bean id="UserService" class="service.impl.UserServiceImpl">
<!--通過構造函數的方式,實現構造注入 -->
<constructor-arg>
<ref bean="userDao" />
</constructor-arg>
<constructor-arg>
<value>123</value>
</constructor-arg>
</bean>
</beans>
運行結果:
-Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@73ad2d6: defining beans [userDao,UserService]; root of factory hierarchy
保存用戶信息到數據庫
s1=null
s2=123
由此可以看出,spring框架是按照impl類中的順序執行的。第二個構造方法把第一個構造方法給覆蓋掉了
怎樣才能不覆蓋:使用index屬性
<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
<!--以上是Spring框架的頭信息 -->
<!--放置要被管理的對象實例 -->
<!-- 使用構造注入的方式 -->
<bean id="userDao" class="dao.impl.UserDaoImpl"></bean>
<bean id="UserService" class="service.impl.UserServiceImpl">
<!--通過構造函數的方式,實現構造注入 -->
<constructor-arg>
<ref bean="userDao" />
</constructor-arg>
<constructor-arg index="1">
<value>123</value>
</constructor-arg>
</bean>
</beans>
運行結果:
保存用戶信息到數據庫
s1=123
s2=null
