👉 博客主页:准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注入和构造器注入的,如果这两种注入方式出现,自动装配配置失效。
👉 以上就是文章的全部内容啦,诸佬如果有任何建议都可以提哦。
👉 创作不易,如果觉得对您有帮助的话,欢迎关注✨点赞👍收藏📂哦。