还是使用上面一个小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属性,指定数据类型

Spring框架-构造注入的属性问题-type属性_构造方法

 

 运行结果:

保存用户信息到数据库

s1=null

s2=null

i1=123