Spring 自动装配机制详解

文章目录

    • 一、手动装配
    • 二、自动装配
      • 1. XML 方式
      • 2. 注解方式

一、手动装配

首先知道 Spring 装配是干了件啥事?我的理解,它就是用来解决 bean 之间依赖关系的一个手段。

比如说我这里有一个 People 类和一个 Dog 类,People 依赖 Dog,也就是说一个人拥有一只狗,人和狗之间是存在依赖关系的,我们都知道 IOC容器就负责管理对象的创建及依赖关系的维护,那么狗和人之间的依赖关系自然就交给 Spring 容器来管理了,而这个依赖关系是需要装配的。

本篇主要讲解的是自动装配,但是在说自动装配之前,我们先来看一下手动装配是怎么装配的,通过对比,你就知道自动装配有多 yyds 了!

① 实体类准备,一个 People 类和一个 Dog 类

在这里插入图片描述

在这里插入图片描述

② 编写核心配置文件,并手动装配 bean 依赖关系

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dog" class="com.zxe.pojo.Dog"/>

    <bean id="people" class="com.zxe.pojo.People">
        <property name="name" value="栈老师"/>
        <property name="dog" ref="dog"/>
    </bean>

</beans>

可以看到,手动装配的 dog 依赖,是用 ref 引用的!

二、自动装配

1. XML 方式

这种方式主要就是用到了 autowire 属性,属性值有 byName 和 byType 两种。接下来以 byName 为例,实体类还是上面的 People 和 Dog。

① 以 byName 方式装配

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dog" class="com.zxe.pojo.Dog"/>

    <bean id="people" class="com.zxe.pojo.People" autowire="byName">
        <property name="name" value="栈老师"/>
    </bean>

</beans>

在这里插入图片描述

这里需要进一步说明一下 byName 和 byType 的区别:
① byName,顾名思义是通过名字去装配的,在 People 中注入一个 Dog,需要将 setDog 方法名里面的 dog 拿出来到核心配置里面找,找什么呢?找 id 名为 dog 的 bean,找到了之后自动注入,注意从实体类里面拿到的这个 dog 一定是 set 后面的内容,并不是变量名
② byType,它是通过类型装配的,将 People 里的 Dog 类型拿出来,到配置文件里找 class 为 Dog 的 bean,然后自动注入, bean 的类型肯定就不能一样了,否则无法找到

2. 注解方式

还有一种最常用的装配方式就是注解装配,它是通过反射来实现的。

① 开启注解支持,<context:annotation-config/>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>
    <bean id="dog" class="com.zxe.pojo.Dog"/>

    <bean id="people" class="com.zxe.pojo.People">
        <property name="name" value="栈老师"/>
    </bean>

</beans>

② 使用 @Autowired 注解标注依赖属性

在这里插入图片描述

注解方法装配属性的过程, @Autowired 默认会优先根据属性的类型去容器中找对应的组件,找到就赋值,如果找到了多个相同类型的组件,我们可以组合使用@Autowired与@Qualifier,@Qualifier 是根据名称来查找的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/87297.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】Redis中的布隆过滤器

【Redis】Redis中的布隆过滤器 前言 在实际开发中&#xff0c;会遇到很多要判断一个元素是否在某个集合中的业务场景&#xff0c;类似于垃圾邮件的识别&#xff0c;恶意IP地址的访问&#xff0c;缓存穿透等情况。类似于缓存穿透这种情况&#xff0c;有许多的解决方法&#xf…

LDAP: error code 53 - unauthenticated bind (DN with no password) disallowed

这个错误提示显示Jenkins无法连接到LDAP服务器&#xff0c;原因是LDAP服务器不允许未认证的绑定&#xff08;DN与无密码&#xff09;。 但实际填写了DN

UITableView自定义TableHeader和TableFooter

UITableView自定义TableHeader和TableFooter 我猜你希望的效果是这样的 我猜你希望的效果是这样的 自定义页眉视图 让我们创建一个文件名 UITableViewHeaderFooterView 的 CustomerHeaderView 子类。 现在让我们创建视图的 Xib 文件并将其命名为 CustomHeaderView。 更改高度标…

Spark大数据分析与实战笔记(第一章 Scala语言基础-1)

文章目录 章节概要1.1 初识Scala1.1.1 Scala的概述1.1.2 Scala的下载安装1.1.3 在IDEA开发工具中下载安装Scala插件1.1.4 开发第一个Scala程序 章节概要 Spark是专为大规模数据处理而设计的快速通用的计算引擎&#xff0c;它是由Scala语言开发实现的&#xff0c;关于大数据技术…

Python数据分析实战-找出两个列表中的不同元素(附源码和实现效果)

实现功能 使用 Python 的集合操作来实现找出两个列表中的不同元素。将两个列表转化为集合类型&#xff0c;然后使用集合的操作来找出不同的元素。 实现代码 list1 [1, 2, 3, 4, 5] list2 [3, 4, 5, 6, 7]set1 set(list1) set2 set(list2)diff set1.symmetric_difference…

ssl卸载原理

SSL卸载&#xff0c;也称为SSL解密&#xff0c;是一种将SSL加密数据流卸成非加密的明文数据流的过程。SSL卸载通常在负载均衡器、代理服务器、WAF等设备中实现&#xff0c;可以提高传输效率和安全性。 SSL卸载的原理是将SSL数据流拦截下来&#xff0c;通过设备内置的证书进行解…

Ansible学习笔记(一)

1.什么是Ansible 官方网站&#xff1a;https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html Ansible是一个配置管理和配置工具&#xff0c;类似于Chef&#xff0c;Puppet或Salt。这是一款很简单也很容易入门的部署工具&#xff0c;它使用SS…

《基础教育论坛》期刊简介及投稿要求

《基础教育论坛》杂志是经国家新闻出版总署批准、国内外公开发行的综合性教育学术期刊。作者可通过&#xff0c;中华人民共和国新闻出版总署的网站进行出版许可及刊号的查询。 2009年&#xff0c;《基础教育论坛&#xff08;综合版&#xff09;》杂志创刊。 2012年&#xff0…

HarmonyOS元服务开发实践:桌面卡片字典

HarmonyOS元服务开发实践&#xff1a;桌面卡片字典 本文转载分享自华为开发者论坛《HarmonyOS元服务开发实践&#xff1a;桌面卡片字典》&#xff0c;作者&#xff1a;蛟龙腾飞 一、项目说明 1.DEMO创意为卡片字典。 2.不同卡片显示不同内容&#xff1a;微卡、小卡、中卡、大卡…

框架分析(4)-Spring

框架分析&#xff08;4&#xff09;-Spring 专栏介绍Spring核心特点控制反转&#xff08;IoC&#xff09;面向切面编程&#xff08;AOP&#xff09;组件化集成简化开发总结 优缺点优点高度可扩展控制反转&#xff08;IoC&#xff09;面向切面编程&#xff08;AOP&#xff09;集…

UE学习记录03----UE5.2 使用MVVM示例

1.打开ue5.2新建C项目 2.项目中通过类导向新建C类&#xff0c;父类选择为UMVVMViewModelBase&#xff0c;创建完成会自动打开vs 3.在VS中对新建的类进行宏定义 使用 C 类向导 创建的类声明自动通过 UCLASS() 宏进行处理。 UCLASS() 宏使得引擎意识到这个类的存在&#xff0c;并…

期权分仓开户资金是否安全?具体保障措施有哪些?

网上关于期权分仓系统的真假一直都没有定论&#xff0c;两方人的争论也让很多没有接触过期权分仓系统的人摸不着头脑&#xff0c;那么期权分仓靠谱吗&#xff1f;资金在里面安全吗&#xff1f;下文为大家科普期权分仓开户资金是否安全?具体保障措施有哪些&#xff1f; 一、期权…

站点平台技术架构

系统架构部署思维导图 平台模块分配&#xff1a; 1.账号模块 2.权限模块 3.站点模块 4.配置模块 5.系统升级 6.日志模块 一、前期工作 1.系统保持一致性方案&#xff1a; GIT版本控制&#xff1a;通过总控端向租户端发送一个更新同步请求&#xff0c;租户端收到请求后执行GI…

房屋结构健康监测,科技助力让建筑更安全

房屋建筑是人们赖以生存的场所&#xff0c;然而当前我国许多房屋已经达到了使用寿命的中期&#xff0c;房屋的安全系数逐年降低&#xff0c;风险也随着时间的推移而累积。长期以来&#xff0c;我国的房屋普遍存在寿命短、隐患多的问题&#xff0c;“重建设&#xff0c;轻管理”…

【3维视觉】网格的谱分解和应用(GFT图傅里叶变换)

网格的谱分解即网格的频率分解&#xff0c;我们学过信号的傅里叶变换&#xff0c;将信号从空域变换到频域。二维图像由离散傅里叶变换DFT(Discrete Fourier Transform)。在图信号领域&#xff0c;也有图的傅里叶变换GFT(Graph Fourier Transform)&#xff0c;网格可以看作是图&…

DevExpress WinForms数据编辑器组件,提供丰富的数据输入样式!(二)

DevExpress WinForms超过80个高影响力的WinForms编辑器和多用途控件&#xff0c;从屏蔽数据输入和内置数据验证到HTML格式化&#xff0c;DevExpress数据编辑库提供了无与伦比的数据编辑选项&#xff0c;包括用于独立数据编辑或用于容器控件(如Grid, TreeList和Ribbon)的单元格。…

关于slot-scope已经废弃的问题

说起来啊&#xff0c;这个问题啊&#xff0c;我之前一直没关注&#xff0c;还是webstorm给我的警告。 因为使用了element-ui的组件库&#xff0c;所以在使用组件的时候往往就cv大法了&#xff0c;直到今天用webstorm写代码是&#xff0c;提示了如下的错误 我这一看&#xff0c…

Springboot中sharding-jdbc的API模式并使用自定义算法

Springboot中sharding-jdbc的API模式并使用自定义算法 可配合AbstractRoutingData使用切换数据源 程序用到了AbstractRoutingData来切换数据源&#xff08;数据源是自定义的格式编写并没有用springboot的自动装配的格式写&#xff09;&#xff0c;但是又用到sharding-jdbc进行…

基于微信小程序+Springboot校园二手商城系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、目前专注于大学生项目实战开发,讲解,毕业答疑辅导✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3…

【Java 高阶】一文精通 Spring MVC - 数据格式化器(六)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…