控制反转及Bean装配的几种方式

2023-11-02

控制反转及Bean装配的几种方式

Spring两大基础核心,一是控制反转,二是依赖注入

控制反转和依赖注入

控制反转,通俗来讲,就是将bean的创建和销毁交由另一个东西全权管理,这个东西叫做Spring容器,一般来说,在Spring应用中,容器管理着应用中所有bean的生命周期,包括何时创建,何时使用,何时销毁,该容器相当于一个bean的管家。控制反转具体体现在:当需要一个bean时,不是用户自己创建,而是Spring容器根据应用的需要,来主动创建一个,并将其注入到应用中。一句话概括:bean的创建完全交给了Spring容器来进行,应用程序本身不再负责所需要bean的创建。举个例子:假设应用程序需要一个名为A的bean,按照以前传统的开发方式,我们需要new一个A对象,然后将A对象赋给相应的变量值,如下代码所示:

Class  Test{

Privat  A  a=new A()

…………

}

应用程序类Test需要一个名字为A的bean,然后Test类直接在类A中创建了一个A对象。这种方式属于“正向”自己注入一个自己需要的beanA。但是在Spring中,这个名为A的bean不在需要Test类自己创建。Spring容器可以帮Test创建一个名字为A的bean然后将该对象注入到Test类中。依赖注入,如上所示,Test类自己在类内部创建一个A,而通过Spring的方式,类A由Spring容器创建,然后自己主动注入到类Test中,并不需要自己主动去创建。所谓依赖注入,其实是通过Spring容器来创建应用程序所需要的bean,然后自己去维护bean与bean之间的依赖关系,比如上面的例子,名为Test的bena和名为A的bean,他们通过Spring的依赖注入来维护这个两个类之间的关系。有的博客中说依赖注入是控制反转的另一种说法,我更倾向于另一种理解,控制反转说的是bean的创建,依赖注入说的是由Spring创建出来的bean之间关系的维护。

Spring中bean装配的几种方式

1.自动化装配

2.通过java方式配置

3.通过xml方式来配置

 

1.通过自动化方式装配

这种方式要创建一个配置类如下:

 

 

 

 

 

@Configuration————————表明这是一个配置类,Spring中该注解用来

表示是一个配置类,将其注册到Spring中。

@ComponentScan———————配置组件扫描,该注解扫描该包及其子包,将配置的相关bean进行扫描。

Class  Test{

 

}

 

然后在相应的bean中上相应的注解,这里主要包含四个:@Component,@Respository,@Service ,@Controller ,其中@Component这个注解可以代替后面三个,但是为了业务逻辑看的清楚,使用@Respository这个注解来进行数据访问层相关的Bean注解,@Service用来业务逻辑层的注解,@Controller用在表现层的注解。

当配置了基本配置类和bean组件注解(@Respository,@Service ,@Controller)之后,可以使用如下方式进行自动注入:

@Autowrized     ——————————这个注解将自动创建Tes类的 ,对象并将实例化的Test对象赋予testt

private  Test   test;

2通过java方式装配

通过java方式来进行注入能完成通过自动注入不能完成的任务,比如说,我有一个第三方组件需要引入,但是组件是第三方的,他的源代码里没有加如诸如@Respository@Service@Controller等注解,那么我们就无法通过自动装配的方式进行初始化组件bean了,这时候,我们可以使用基于java的配置。

如下所示:

@Configuration  ————————在配置类中添加@Configuration注解,代表是一个配置类

Public Class Config{

@Bean        ————————将名字为A的bean进行注册为Spring上下文。

Public A getA(){
return new A();

}

然后通过配置类Config来进行依赖注入。

@Bean

Public Class B(){

Return new B(getA());

}

3通过xml配装配

 

通过xml方式进行装配比较繁琐,首先需要建立一个xml配置文件,如下所示:

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

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <bean id="A " class="类的全限定名”></bean>

</beans>

如上面红色部分,通过<bean>标签来将bean注册到Spring上下文中,在使用的时候,我们可以通过两种方式来获取相应的实例化对象:

1.通过Spring上下文

ApplicationContext Appcontext=new ClassPathXmlApplicationContext("配置文件.xml");

Private  A a=Appcontext.getBean(“A”);

2.通过注解自动配置

@Autowrized

Private A a;

对于在通过配置文件进行依赖注入,可以通过下面几种方式,1)通过构造器注入2)通过setter方法注入3)通过工厂方法注入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

控制反转及Bean装配的几种方式 的相关文章

随机推荐

  • Android中的BGABadgeView未读消息提示小红点

    当用户收到未读消息的时候需要一个徽章来提示 也就是控件上面的一个小红点 下面就来描述一下小红点的实现方法 首先贴出BGABadgeView的Github地址 https github com bingoogolapple BGARefres
  • 【git】github 如何同步别人的仓库

    git github 如何同步别人的仓库 前言 假设你有两个 Git 仓库 并希望同步它们 以便它们含有相同的内容 你必须要在 Git 中配置一个远程服务器指向上游的仓库地址 这样你在 fork 中的更改才能同步到原始的仓库里 这样也能把原
  • Linux学习笔记day01

    Linux文件与目录结构 Linux一切皆文件 目录结构 目录名 释义 bin usr bin usr local bin 是Binary的缩写 这个目录存放着最经常使用的命令 home 存放普通用户的主目录 在Linux中每个用户都有一个
  • MDM命令操作介绍

    MDM涉及到的命令的操作介绍 一 Control Commands 控制类命令 1 Device Lock 设备锁屏 RequestType为RequestType 原文 Immediately locks the device If a
  • 单片机中OTA升级流程及bootload软件框架

    OTA升级流程及bootload软件框架 为什么要进行OTA升级 OTA升级的流程 bootload软件框架 bootload软件源码 针对接收HEX文件 为什么要进行OTA升级 OTA 英文全称是Over the Air Technolo
  • 推荐系统(2)——评测指标

    根据评测体系来评价一个推荐系统的好坏 由于推荐系统是和实际收益挂钩 所以需要考虑三方 用户 物品提供者和平台 的利益 实现最大化的三方共赢 接下来从 实 验 方 法 评
  • 若依系统取消验证码,超时登陆

    在登陆系统时 登陆界面会显示输入验证码 每次登陆比较麻烦 这里讲解下如何去除验证码 1 改变令牌时间延长登陆的超时时间 2 注掉前后台验证码中部分代码 登陆一段时间后 有时会被自动退出 这是系统现在了登陆超时时间 1 延长令牌超时时间 2
  • shell脚本部分

    第五次作业 题目 1 判断web服务是否运行 1 查看进程的方式判断该程序是否运行 2 通过查看端口的方式判断该程序是否运行 如果没有运行 则启动该服务并配置防火墙规则 2 使用curl命令访问第二题的web服务 看能否正常访问 如果能正常
  • 一文看完Vue3的渲染过程

    Vue3官网中有下面这样一张图 基本展现出了Vue3的渲染原理 本文会从源码角度来草率的看一下Vue3的运行全流程 旨在加深对上图的理解 从下面这个很简单的使用示例开始 import createApp ref from vue creat
  • springboot2.x使用redis作为缓存(使用fastjson序列化的方式,并调试反序列化异常)

    1 redis是内存数据库 可以单独作为数据库 有持久化方案 也可以作为缓存 一般为MySQL搭配 1 1 可以通过jedis 代码的方式手动将其传入redis作为缓存 1 2 也可以通过注解的方式 和spring boot整合 通过 ca
  • React井字棋后续功能完善

    React的入门教程 完成后有6个小功能点的补充 实现后的代码 import React from react import ReactDOM from react dom import index css function Square
  • 《视觉SLAM十四讲》笔记(1-3)

    目录 文章目录 目录 第1讲 引言 第2讲 初识SLAM 第3讲 三维空间刚体运动 旋转矩阵 点 向量和坐标系 坐标系间的欧式变换 变换矩阵与齐次坐标 齐次坐标 Homogeneous Coordinate 的优势 旋转向量和欧拉角 旋转向
  • STL系列之六 set与hash_set

    https blog csdn net MoreWindows article details 7029587
  • FFmpeg学习笔记--Ubuntu20.04编译安装FFmpeg、FFplay和FFprobe

    目录 1 下载FFmpeg 2 编译FFmpeg 3 设置环境变量 4 测试 1 下载FFmpeg 下载 5 1 版本的 ffmpeg wget http www ffmpeg org releases ffmpeg 5 1 tar gz
  • 运维工程师面试题 ----- 系统网络类

    1 如何检测某个端口所占用的进程 2 对于linux主机的cpu负载使用 什么情况下user的比例升高 什么情况下system的比例升高 请联系实际举例 3 在不umount的情况下 如何重新设置mount的参数 4 如果不小心在系统下执行
  • 01Linux下C语言锁的学习之Linux下的互斥锁

    01Linux下C语言锁的学习之Linux下的互斥锁 概述 为什么需要锁 因为当我们多个线程访问全局变量时 同时操作的话可能存在问题 例如小明和小红同时去拿家里的银行账号里的钱 小明看到时为100块 小红也是 但是小明先拿到 若不加锁 那么
  • GLUE 数据下载与提交

    1 下载 GLUE 任务分为主要的任务 CoLA MNLI MRPC QNLI QQP RTE SST 2 STS B WNLI 以及附加的任务 Diagnostic 下面简称为 AX 其中只有 STS B 是回归任务 其余的全为分类任务
  • webpack 学习(一)前端常用的模块化设计模式之AMD

    AMD 异步模块定义 是为浏览器环境设计的 因为 CommonJS 模块系统是同步加载的 当前浏览器环境还没有准备好同步加载模块的条件 AMD 定义了一套 JavaScript 模块依赖异步加载标准 来解决同步加载的问题 模块通过 defi
  • 【第十一届泰迪杯数据挖掘挑战赛】A 题:新冠疫情防控数据的分析 思路+代码(持续更新)

    第十一届泰迪杯数据挖掘挑战赛 A 题 新冠疫情防控数据的分析 思路 代码 持续更新 问题背景 解决问题 代码下载 数据分析 Task1 Task2 Task3 Task4 问题背景 自 2019 年底至今 全国各地陆续出现不同程度的新冠病毒
  • 控制反转及Bean装配的几种方式

    控制反转及Bean装配的几种方式 Spring两大基础核心 一是控制反转 二是依赖注入 控制反转和依赖注入 控制反转 通俗来讲 就是将bean的创建和销毁交由另一个东西全权管理 这个东西叫做Spring容器 一般来说 在Spring应用中