《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 自动装配相关推荐

  1. Spring自动装配(autowire)篇

    什么是自动装配 自动装配帮我们省去了 property标签配置操作,Spring会自动根据 属性名称,类型,构造器来进行自动注入. 例如不进行自动装配配置如下: <bean id="u ...

  2. 学习篇(一)- Spring自动装配的方式

    Spring自动装配的方式 1. 什么是自动装配? ​ 自动装配就是会通过Spring 的上下文为你找出相应依赖项的类,通俗的说就是Spring 会在上下文中自动查找,并自动给Bean装配与其相关的属 ...

  3. spring自动装配依赖包_解决Spring自动装配中的循环依赖

    spring自动装配依赖包 我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践. 使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加. 服务层中的每个服务可能会消耗其他服 ...

  4. spring注解驱动开发-4 Spring 自动装配

    Spring 自动装配 前言 Spring 自动装配的几种方式 1.@Autowired @Qualifier("组件id") @Primary 2.@Resource方式 3.@ ...

  5. spring自动装配通俗易懂的解释零基础也能看懂

    Spring自动装配通俗易懂的解释 在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间 ...

  6. Spring自动装配通俗易懂的解释

    Spring自动装配通俗易懂的解释 在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间 ...

  7. Spring 自动装配 ‘byType’

    转载自   Spring 自动装配 'byType' Spring 自动装配 'byType' 这种模式由属性类型指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans ...

  8. Spring 自动装配 ‘byName’

    转载自  Spring 自动装配 'byName' Spring 自动装配 'byName' 这种模式由属性名称指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 ...

  9. Java的注解机制——Spring自动装配的实现原理

    JDK1.5加入了对注解机制的支持,实际上我学习Java的时候就已经使用JDK1.6了,而且除了@Override和@SuppressWarnings(后者还是IDE给生成的--)之外没接触过其他的. ...

最新文章

  1. 恩平服务器维修,四月 2021 | EDUP
  2. CentOS下C++开发环境搭建
  3. 算法之矩阵计算斐波那契数列
  4. 【dfs】树上游戏(P2664)
  5. Nginx----基础
  6. 深度学习(四十二)word2vec词向量学习笔记
  7. Android的5个进程等级(转)
  8. 我新买的GTX1050为何装上去一直是黑屏
  9. SSH客户端:Termius for Mac
  10. CAPL如何组装自定义报文
  11. 锐捷S12010交换机配置端口镜像
  12. 【原创】JAVA入门之猜拳小游戏
  13. 回归模型+自变量和因变量之间的关系、回归模型的种类、回归模型的输出类型、个数角度
  14. 金融行业市场策划案例(共12份)
  15. Echarts实现省级到市级地图下钻
  16. 树莓派连接笔记本显示器(转载+整合)
  17. 判断图片路径是否404
  18. 2.8 CSS3新特性
  19. php html 纯文本,php – 使用纯文本回退发送HTML简报
  20. 阅读类APP会员页竞品分析

热门文章

  1. linux下默认国外源下载过慢的解决方法
  2. Reids简直存储,key以“\xAC\xED\x00\x05t\x00“开头
  3. 极验验证--滑块验证
  4. 母亲节到了,用Python给老妈写个祝福小程序~
  5. 2015年全国计算机一级考试试题及答案,2015全国计算机一级考试Msoffice模拟试题(九)答案及解析...
  6. 如何使linux用户下次登录强制修改密码
  7. 多商户商城系统功能拆解13讲-平台端会员管理
  8. 把手账打印成书 把回忆装订成册
  9. sra-toolkit报错:An error occured: SetCurrentDirectory: 目录名称无效。
  10. 科普:SAS是什么语言