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