【Spring】依赖注入之自动装配

👉 博客主页:准Java全栈开发工程师
👉 00年出生,即将进入职场闯荡,目标赚钱,可能会有人觉得我格局小、觉得俗,但不得不承认这个世界已经不再是以一条线来分割的平面,而是围绕财富旋转的球面,成为有钱人不是为了去掌控球体的转向,而是当有人恶意掌控时,努力保护好家人和自己。


博主的上一篇文章中详细介绍了依赖注入的setter注入和构造器注入两种方式,这时就会有人问了,不“注入”行不行啊?不“注入”谁给我赋值啊!
其实是可以不手动注入的,因为Spring提供了自动装配功能。

一、自动装配

  • IoC容器根据bean所依赖的资源在容器中自动查找并注入的过程称为自动装配。
  • 虽然使用了自动装配功能,但仍需要提供setter方法。

二、自动装配的方式

自动装配的方式有:按类型、按名称和按构造方法三种方式,但是最最常用的是按类型装配,其次是按名称,按构造方法的使用频率非常低,我们只需掌握前两种方式即可。

三、案例演示

1、定义好dao层和service层所需接口和实现类

1)BeanDao接口
public interface BeanDao {
    public void save();
}
2)BeanDaoImpl实现类
public class BeanDaoImpl implements BeanDao {
    public void save() {
        System.out.println("beanDao save...");
    }
}
3)BeanService接口
public interface BeanService {
    public void save();
}
4)BeanServiceImpl实现类
public class BeanServiceImpl implements BeanService {
    private BeanDao beanDao;

    public void setBeanDao(BeanDao beanDao) {
        this.beanDao = beanDao;
    }

    public void save() {
        System.out.println("bean service save...");
        beanDao.save();
    }
}
  • 虽然定义了setter方法,但是并不是setter注入方式。

2、在applicationContext.xml文件中配置bean对象

<bean id="beanDao" class="dao.impl.BeanDaoImpl"/>
<bean id="beanService" class="service.impl.BeanServiceImpl" autowire="byType"/>
  • 自动装配方式并没有通过“property”标签或者“constructor-arg”标签来实现注入。
  • 而是使用了“autowire"标签实现。
  • ”byType“表示按照类型进行自动装配工作。
  • 除此之外,还可以选择”byName“按照名称进行自动装配。

3、编写测试代码

public class App {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        BeanService beanService = (BeanService) context.getBean("beanService");
        beanService.save();
    }
}

4、测试结果

bean service save...
beanDao save...
  • 结果仍然正确,自动装配成功。

四、自动装配小结

  • 自动装配方式用于注入引用数据类型,不能用于注入基本数据类型。
  • 推荐使用按类型(byType)装配方式,但是使用该方式时需要保证容器中相同类型的bean对象只能有一个。如果有多个,IoC容器会不知道将那一个bean注入。
  • 不推荐使用按名称(byName)装配方式,这是因为需要保证在类中定义的属性名和配置文件中配置的bean对象名保持一致,会产生属性名与配置耦合问题。
  • 自动装配的优先级是低于setter注入和构造器注入的,如果这两种注入方式出现,自动装配配置失效。

👉 以上就是文章的全部内容啦,诸佬如果有任何建议都可以提哦。
👉 创作不易,如果觉得对您有帮助的话,欢迎关注✨点赞👍收藏📂哦。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

准Java全栈开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值