第六篇 Spring 自动装配
《Spring》篇章整体栏目
—————————————————————————————
【第一章】spring 概念与体系结构
【第二章】spring IoC 的工作原理
【第三章】spring IOC与Bean环境搭建与应用
【第四章】spring bean定义
【第五章】Spring 集合注入、作用域
【第六章】Spring 自动装配
【第七章】spring AOP
【第八章】Spring 集成JdbcTemplate
【第九章】Spring数据库事务管理
【第十章】Spring 集成Redis
【第十一章】Spring实战之打造新闻系统后端接口
—————————————————————————————
目录
- 前言
- 1、自动装配
- 1.1、自动装配规则
- 1.2、自动装配(基于注解)
- 1.2.1、引入依赖
- 1.2.2、开启组件扫描
- 1.2.2、使用注解定义bean
- 1.2.3、依赖注入
- 1.2.3.1、@Autowired
- 1.2.3.2、@Resource
- 1.2.3.3、@Qualifier
—————————————————————————————
前言
Bean 与 Bean 之间建立依赖关系的行为称为“装配”,使用注解可以帮忙我们从繁琐的xml配置中解脱出来,完成Bean的自动装配。
1、自动装配
Bean 与 Bean 之间建立依赖关系的行为称为“装配”
<bean id="news" class="com.xxx.xml.beans.News"><constructor-arg name="title" value="热门新闻"/><constructor-arg name="content" value="ChatGpt发布4.0版本"/><constructor-arg name="newsType" ref="newsType"/>
</bean>
<bean id="newsType" class="com.xxx.xml.beans.NewsType"><constructor-arg name="code" value="100"/><constructor-arg name="typeName" value="时事新闻"/>
</bean>
上面的配置依赖关系多,xml可读性差,所以提供自动装配功能
Spring 的自动装配功能可以让 Spring 容器依据某种规则(自动装配的规则,有五种),为指定的 Bean 从应用的上下文(AppplicationContext 容器)中查找它所依赖的 Bean,并自动建立 Bean 之间的依赖关系。而这一过程是在完全不使用任何 <constructor-arg>和 <property> 元素 ref 属性的情况下进行的。
1.1、自动装配规则
属性值 | 说明 |
---|---|
byName | 按名称自动装配。Spring 会根据的 Java 类中对象属性的名称,在整个应用的上下文 ApplicationContext(IoC 容器)中查找。若某个 Bean 的 id 或 name 属性值与这个对象属性的名称相同,则获取这个 Bean,并与当前的 Java 类 Bean 建立关联关系。 |
byType | 按类型自动装配Spring 会根据 Java 类中的对象属性的类型,在整个应用的上下文 ApplicationContext(IoC 容器)中查找。若某个 Bean 的 class 属性值与这个对象属性的类型相匹配,则获取这个 Bean,并与当前的 Java 类的 Bean 建立关联关系。 |
constructor | 与 byType 模式相似,不同之处在与它应用于构造器参数(依赖项),如果在容器中没有找到与构造器参数类型一致的 Bean,那么将抛出异常。其实就是根据构造器参数的数据类型,进行 byType 模式的自动装配。 |
default | 表示默认采用上一级元素 <beans> 设置的自动装配规则(default-autowire)进行装配。 |
no | 默认值,表示不使用自动装配,Bean 的依赖关系必须通过 <constructor-arg>和 <property> 元素的 ref 属性来定义。 |
1.2、自动装配(基于注解)
Spring 通过注解实现自动装配的步骤如下:
- 引入依赖
- 开启组件扫描
- 使用注解定义 Bean
- 依赖注入
1.2.1、引入依赖
引入spring-aop-5.3.13.jar
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.3.13</version>
</dependency>
1.2.2、开启组件扫描
<!--开启组件扫描功能-->
<context:component-scan base-package="com.xxx"></context:component-scan>
1.2.2、使用注解定义bean
注解 | 说明 |
---|---|
@Component | 该注解用于描述 Spring 中的 Bean,它是一个泛化的概念,仅仅表示容器中的一个组件(Bean),并且可以作用在应用的任何层次,例如 Service 层、Dao 层等。使用时只需将该注解标注在相应类上即可。 |
@Repository | 该注解用于将数据访问层(Dao 层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。 |
@Service | 该注解通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。 |
@Controller | 该注解通常作用在控制层(SpringMVC 的 Controller),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。 |
1.2.3、依赖注入
基于注解方式实现依赖注入
1.2.3.1、@Autowired
可以应用到 Bean 的属性变量、setter 方法、非 setter 方法及构造函数等,默认按照 Bean 的类型进行装配。
@Autowired 注解默认按照 Bean 的类型进行装配,默认情况下它要求依赖对象必须存在,如果允许 null 值,可以设置它的 required 属性为 false。如果我们想使用按照名称(byName)来装配,可以结合 @Qualifier 注解一起使用
1.2.3.2、@Resource
作用与 Autowired 相同,区别在于 @Autowired 默认按照 Bean 类型装配,而 @Resource 默认按照 Bean 的名称进行装配。
@Resource 中有两个重要属性:name 和 type。
- Spring 将 name 属性解析为 Bean 的实例名称,type 属性解析为 Bean 的实例类型。
- 如果指定 name 属性,则按实例名称进行装配;
- 如果指定 type 属性,则按 Bean 类型进行装配;
- 如果都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果都无法匹配,则抛出 NoSuchBeanDefinitionException 异常。
1.2.3.3、@Qualifier
与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。
第六篇 Spring 自动装配相关推荐
- Spring自动装配(autowire)篇
什么是自动装配 自动装配帮我们省去了 property标签配置操作,Spring会自动根据 属性名称,类型,构造器来进行自动注入. 例如不进行自动装配配置如下: <bean id="u ...
- 学习篇(一)- Spring自动装配的方式
Spring自动装配的方式 1. 什么是自动装配? 自动装配就是会通过Spring 的上下文为你找出相应依赖项的类,通俗的说就是Spring 会在上下文中自动查找,并自动给Bean装配与其相关的属 ...
- spring自动装配依赖包_解决Spring自动装配中的循环依赖
spring自动装配依赖包 我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践. 使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加. 服务层中的每个服务可能会消耗其他服 ...
- spring注解驱动开发-4 Spring 自动装配
Spring 自动装配 前言 Spring 自动装配的几种方式 1.@Autowired @Qualifier("组件id") @Primary 2.@Resource方式 3.@ ...
- spring自动装配通俗易懂的解释零基础也能看懂
Spring自动装配通俗易懂的解释 在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间 ...
- Spring自动装配通俗易懂的解释
Spring自动装配通俗易懂的解释 在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间 ...
- Spring 自动装配 ‘byType’
转载自 Spring 自动装配 'byType' Spring 自动装配 'byType' 这种模式由属性类型指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans ...
- Spring 自动装配 ‘byName’
转载自 Spring 自动装配 'byName' Spring 自动装配 'byName' 这种模式由属性名称指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 ...
- Java的注解机制——Spring自动装配的实现原理
JDK1.5加入了对注解机制的支持,实际上我学习Java的时候就已经使用JDK1.6了,而且除了@Override和@SuppressWarnings(后者还是IDE给生成的--)之外没接触过其他的. ...
最新文章
- 恩平服务器维修,四月 2021 | EDUP
- CentOS下C++开发环境搭建
- 算法之矩阵计算斐波那契数列
- 【dfs】树上游戏(P2664)
- Nginx----基础
- 深度学习(四十二)word2vec词向量学习笔记
- Android的5个进程等级(转)
- 我新买的GTX1050为何装上去一直是黑屏
- SSH客户端:Termius for Mac
- CAPL如何组装自定义报文
- 锐捷S12010交换机配置端口镜像
- 【原创】JAVA入门之猜拳小游戏
- 回归模型+自变量和因变量之间的关系、回归模型的种类、回归模型的输出类型、个数角度
- 金融行业市场策划案例(共12份)
- Echarts实现省级到市级地图下钻
- 树莓派连接笔记本显示器(转载+整合)
- 判断图片路径是否404
- 2.8 CSS3新特性
- php html 纯文本,php – 使用纯文本回退发送HTML简报
- 阅读类APP会员页竞品分析
热门文章
- linux下默认国外源下载过慢的解决方法
- Reids简直存储,key以“\xAC\xED\x00\x05t\x00“开头
- 极验验证--滑块验证
- 母亲节到了,用Python给老妈写个祝福小程序~
- 2015年全国计算机一级考试试题及答案,2015全国计算机一级考试Msoffice模拟试题(九)答案及解析...
- 如何使linux用户下次登录强制修改密码
- 多商户商城系统功能拆解13讲-平台端会员管理
- 把手账打印成书 把回忆装订成册
- sra-toolkit报错:An error occured: SetCurrentDirectory: 目录名称无效。
- 科普:SAS是什么语言