Spring框架-構造注入的順序問題-index屬性


還是使用上一個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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM