spring专题笔记(六):bean的自动装配(自动化注入)-根据名字进行自动装配、根据类型进行自动装配。代码演示,通俗易懂。

devtools/2024/12/29 5:03:43/

目录

一、根据名字进行自动装配--byName

二、根据类型进行自动装配 byType


本文章主要是介绍spring的自动装配机制, 用代码演示spring如何根据名字进行自动装配、如何根据类型进行自动装配。代码演示,通俗易懂。

一、根据名字进行自动装配--byName

UserService 类中调用了UserDao 类中的delete()方法

java">public class UserService {UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void delete(){userDao.delete();}
}
java">public class UserDao {public void delete(){System.out.print("删除用户信息");}
}

配置如下:

给需要注入对象的bean加上autowire="byName"

注意一:根据名字进行自动装配也是基于set注入方式实现的,所以需要写set方法。set注入一定要有无参构造方法。

注意二:根据名字进行自动装配的时候,被注入的对象的bean的id不能随便写。

必须是set方法的方法名去掉set,剩下的单词首字母变小写

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--哪个类需要引用其他bean,就在哪个类进行自动装配--><!--根据名字进行自动装配,注意:自动装配也是基于set注入方式实现的--><bean id="UserServiceBean" class="com.linctSpring6.service.UserService" autowire="byName"></bean><!--id一般也叫做bean的名称--><!--根据名字进行自动装配的时候,被注入的对象的bean的id不能随便写--><!--必须是set方法的方法名去掉set,剩下的单词首字母变小写--><bean id="userDao" class="com.linctSpring6.dao.UserDao"></bean></beans>

我们写一个测试类来测试这个方法

java">   @Testpublic void testUserServiceByName(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("set-bean-autowire.xml");UserService userService = applicationContext.getBean("UserServiceBean", UserService.class);userService.delete();}

可以看到,根据名字自动装配bean成功

二、根据类型进行自动装配 byType

UserService 类中调用了UserDao 类中的delete()方法和StudentDao类中creat()方法

java">public class UserService {UserDao userDao;StudentDao studentDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void setStudentDao(StudentDao studentDao) {this.studentDao = studentDao;}public void userServicemethod(){userDao.delete();studentDao.creat();}}
java">public class UserDao {public void delete(){System.out.println("删除用户信息");}
}
java">public class StudentDao {public void creat(){System.out.println("创建学生信息");}
}

配置如下:

根据类型进行自动装配 byType也是通过set方法来注入的。

byType方法的使用非常简单,给需要注入对象的bean加上autowire="byType",spring就会自动根据类型帮我们的对象注入对应的bean,非常强大。

java"> <!--根据类型进行自动装配--><bean id="UserServiceBean" class="com.linctSpring6.service.UserService" autowire="byType"></bean><bean id="userDao" class="com.linctSpring6.dao.UserDao"></bean><bean id="studentDao" class="com.linctSpring6.dao.StudentDao"></bean>

 可以看到,根据类型自动装配bean成功

注意点:如果同一个配置文件中写注入了2个相同的baen,则会报错

所以根据类型进行自动装配,某一类型的实例只能有一个。

报错如下:

以上就是我对bean的自动装配(自动化注入)的理解啦,希望能帮到大家,有问题的地方欢迎大家一起讨论!

后续会不断更新作品,欢迎大家一起讨论学习。❤❤❤


http://www.ppmy.cn/devtools/145757.html

相关文章

v8引擎垃圾回收

V8引擎垃圾回收机制 v8引擎负责JavaScript的执行。V8引擎具有内置的垃圾回收机制&#xff0c;用于自动管理内存分配和释放 堆与栈 栈空间 栈空间是小而连续的内存空间&#xff0c;主要用于存储局部变量和函数调用的相关信息&#xff0c;同时栈结构是“先进后出”的策略 栈…

数据仓库工具箱—读书笔记02(Kimball维度建模技术概述03、维度表技术基础)

Kimball维度建模技术概述 记录一下读《数据仓库工具箱》时的思考&#xff0c;摘录一些书中关于维度建模比较重要的思想与大家分享&#x1f923;&#x1f923;&#x1f923; 第二章前言部分作者提到&#xff1a;技术的介绍应该通过涵盖各种行业的熟悉的用例展开&#xff08;赞同…

typescript数据类型(二)

四、高级数据类型 1. 接口&#xff08;interface&#xff09; &#xff08;1&#xff09; 接口定义变量和函数参数的类型 //定义接口&#xff0c;给对象使用 interface InfoItf{name:string,age:number,height:string }let obj:InfoItf {name: Lucy,age: 14,height: 175 }/…

Redis 应用场景深度探索

一、Redis 简介 Redis&#xff08;Remote Dictionary Server&#xff09;是一款高性能的开源内存数据库&#xff0c;同时也可用作缓存系统。它以其卓越的性能和丰富的数据结构而备受瞩目&#xff0c;具有以下关键特性&#xff1a; 基于内存存储&#xff1a;数据读写操作主要在…

Redis篇--常见问题篇9--其他一些问题

之前的篇章中介绍了Redis使用中的一些问题&#xff0c;如&#xff1a;缓存穿透&#xff0c;缓存雪崩&#xff0c;缓存击穿&#xff0c;缓存一致性&#xff0c;大Key以及热Key&#xff0c;这些问题算是比较常遇到的问题了。除此之外&#xff0c;还有一些其他的问题&#xff0c;如…

<代码随想录> 算法训练营-2024.12.26

今日专题 &#xff1a;动态规划 子序列 1143. 最长公共子序列 描述&#xff1a; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。一个字符串的 子序列 是指这样一个新的字符串&#xff1…

(同一个正则表达式设置了全局标志(如 g),并循环使用test方法),导致匹配相同值却返回结果不一样

(同一个正则表达式设置了全局标志&#xff08;如 g&#xff09;,并循环使用test方法)&#xff0c;导致匹配相同值却返回结果不一样&#xff01; 正则表达式的 lastIndex 属性。每次执行 test 方法时&#xff0c;如果正则表达式设置了全局标志&#xff0c;test 方法会改变正则表…

Android 13 非 Launcher 应用开机启动:通过监听开机广播实现

Android 13 非 Launcher 应用开机启动:通过监听开机广播实现 在 Android 系统中,非 Launcher 应用无法直接作为默认启动器运行,尤其是在 Android 13 中,即使通过修改 AOSP 源码为应用添加 Launcher 属性,也可能无法实现开机启动。针对这种情况,如果项目时间紧迫,可以通…