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

posted on 2019-12-29 16:51  ~码铃薯~  阅读(2177)  评论(0编辑  收藏  举报

导航