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