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

还是使用上面一个小demo,进行测试,验证一个问题,废话不多说了,上代码进行比较

package service.impl;

import service.UserService;
import dao.UserDao;
import entity.User;

/**
 * 用户业务类,实现对User功能的业务管理
 */
public class UserServiceImpl implements UserService {

    // 声明接口类型的引用,和具体实现类解耦合
    private UserDao dao;
    private String s1;
    private String s2;
    private int i1;
    

    // 生成无参构造方法
    public UserServiceImpl() {

    }

    // 带参数构造方法   为dao进行赋值
    public UserServiceImpl(UserDao dao) {
        this.dao = dao;
    }
    public UserServiceImpl(UserDao dao,String s1) {
        this.dao = dao;
        this.s1=s1;
    }
    public UserServiceImpl(String s2,UserDao dao) {
        this.dao = dao;
        this.s2=s2;
    }
    public UserServiceImpl(int i1,UserDao dao) {
        this.dao = dao;
        this.i1=i1;
    }


    public UserDao getDao() {
        return dao;
    }

    // dao 属性的setter访问器,会被Spring调用,实现设值注入
    public void setDao(UserDao dao) {
        this.dao = dao;
    }

    public void addNewUser(User user) {
        // 调用用户DAO的方法保存用户信息
        dao.save(user);
        System.out.println("s1="+s1);
        System.out.println("s2="+s2);
        System.out.println("i1="+i1);
    }
}

核心配置文件:

<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

相关推荐