Spring框架构造注入的属性问题type属性

还是使用上面一个小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     private int i1;
17     
18 
19     // 生成无参构造方法
20     public UserServiceImpl() {
21 
22     }
23 
24     // 带参数构造方法   为dao进行赋值
25     public UserServiceImpl(UserDao dao) {
26         this.dao = dao;
27     }
28     public UserServiceImpl(UserDao dao,String s1) {
29         this.dao = dao;
30         this.s1=s1;
31     }
32     public UserServiceImpl(String s2,UserDao dao) {
33         this.dao = dao;
34         this.s2=s2;
35     }
36     public UserServiceImpl(int i1,UserDao dao) {
37         this.dao = dao;
38         this.i1=i1;
39     }
40 
41 
42     public UserDao getDao() {
43         return dao;
44     }
45 
46     // dao 属性的setter访问器,会被Spring调用,实现设值注入
47     public void setDao(UserDao dao) {
48         this.dao = dao;
49     }
50 
51     public void addNewUser(User user) {
52         // 调用用户DAO的方法保存用户信息
53         dao.save(user);
54         System.out.println("s1="+s1);
55         System.out.println("s2="+s2);
56         System.out.println("i1="+i1);
57     }
58 }

核心配置文件:

<bean id="UserService" class="service.impl.UserServiceImpl">
<!--通过构造函数的方式,实现构造注入 -->
<constructor-arg>
  <ref bean="userDao" />
</constructor-arg>
<constructor-arg>
  <value>123</value>
</constructor-arg>
</bean>

运行结果:

保存用户信息到数据库
s1=null
s2=123
i1=0

由此可见,是没有附上值的 ,为i1变量

解决办法:对核心配置文件进行修改,使用type属性,指定数据类型

 运行结果:

保存用户信息到数据库
s1=null
s2=null
i1=123

原文地址:https://www.cnblogs.com/dongyaotou/p/12115500.html