Spring 常用的三种注入方式

Spring 通过 DI(依赖注入)实现 IOC(控制反转),常用的注入方式主要有三种:构造方法注入,set 方法注入,基于注解的注入。

一、通过构造方法注入

先简单了解一下测试项目的结构,用 maven 构建的,四个包:

  • entity:存储实体,里面只有一个 User 类
  • dao:数据访问,一个接口,两个实现类
  • service:服务层,一个接口,一个实现类,实现类依赖于 IUserDao
  • test:测试包
    在 spring 的配置文件中注册 UserService,将 UserDaoJdbc 通过 constructor-arg 标签注入到 UserService 的某个有参数的构造方法
<!-- 注册 userService -->
<bean id="userService" class="com.lyu.spring.service.impl.UserService">
    <constructor-arg ref="userDaoJdbc"></constructor-arg>
</bean>
<!-- 注册 jdbc 实现的 dao -->
<bean id="userDaoJdbc" class="com.lyu.spring.dao.impl.UserDaoJdbc"></bean>

如果只有一个有参数的构造方法并且参数类型与注入的 bean 的类型匹配,那就会注入到该构造方法中。

public class UserService implements IUserService {
   

    private IUserDao userDao;

    public UserService(IUserDao userDao) {
   
        this.userDao = userDao;
    }

    public void loginUser() {
   
        userDao.loginUser();
    }

}
@Test
public void testDI() {
   
    ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    // 获取 bean 对象
    UserService userService = ac.getBean(UserService.class, "userService");
    // 模拟用户登录
    userService.loginUser();
}

测试打印结果:jdbc-登录成功

注:模拟用户登录的 loginUser 方法其实只是打印了一条输出语句,jdbc 实现的类输出的是:jdbc-登录成功,mybatis 实现的类输出的是:mybatis-登录成功。

问题一:如果有多个有参数的构造方法并且每个构造方法的参数列表里面都有要注入的属性,那 userDaoJdbc 会注入到哪里呢?

public class UserService implements IUserService {
   

    private IUserDao userDao;
    private User user;

    public UserService(IUserDao userDao) {
   
        System.out.println("这是有一个参数的构造方法");
        this.userDao = userDao;
    }

    public UserService(IUserDao userDao, User user
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值