当前位置: 首页 > news >正文

SpringBoot With IoC,DI, AOP,自动配置

文章目录

  • 1 IoC(Inverse Of Controller)
  • 2 DI(Dependency Injection)
  • 3 AOP(面向切面编程)
    • 3.1 什么是AOP?
    • 3.2 AOP的作用?
    • 3.3 AOP的核心概念
    • 3.4 AOP常见通知类型
    • 3.5 切入点表达式
  • 4 自动配置
    • 4.1 简述:SpringBoot自动配置的原理
    • 4.2 源码跟踪

说明:IoC、DI均为软件工程中思想,致力提高“高内聚,低耦合”的软件设计思路。

1 IoC(Inverse Of Controller)

什么是IOC?(Inverse Of Controller)控制反转,把对象的创建权(new对象), 反转为 Spring容器管理,IOC创建的对象称之为Bean对象

1.1 声明bean的注解?(即把对象放入容器中的注解)

注解说明
@Component不属于以上三类时,用此注解
@Controller标注在控制层类上
@Service标注在业务类上
@Repository标注在数据访问层类上

2 DI(Dependency Injection)

什么是DI?(Dependency Injection)依赖注入,给容器中bean的属性赋值,常用使用方式,使用@Autowired注解声明在需要注入的类上,此时就会去spring容器中寻找Bean对象

2.1 依赖注入的注解?

注解说明
@Autowired按照类型注入
@Qualifier按照名称注入 要和@Autowired搭配使用
@Resource按照名称注入 = @Autowired + @Qualifier

3 AOP(面向切面编程)

3.1 什么是AOP?

面向切面编程

3.2 AOP的作用?

在不改变原始代码的基础上进行功能增强

3.3 AOP的核心概念

名词解释
连接点所有可以进行功能增强的方法都是连接点
切入点进行了功能增强的方法就是切入点
通知共性功能
切面切入点 + 通知
目标对象通知所应用的对象就是目标对
切入点表达式指定哪些方法是切入点

3.4 AOP常见通知类型

通知类型解释
@Before前置通知
@After后置通知
@Around环绕通知
@AfterReturning返回后通知
@AfterThrowing异常后通知

3.5 切入点表达式

写法一:@PointCut("execution(访问修饰符 返回值 包名.类名.方法名(参数))")

  • 通配符:
    * 单个或半个任意符号 多用于模糊匹配
    .. 多个连续任意符号 多用于参数省略或包名省略

写法二:@PointCut("@annotation(注解的全路径类名)")

  • 通过连接点对象获取目标方法的信息
    获取类名:joinPoint.getTarget().getClass().getName()
    获取方法名:joinPoint.getSignature().getName()
    获取参数:joinPoint.getArgs()
    执行目标方法:joinPoint.proceed()
    获取返回值:Object result = joinPoint.proceed()

4 自动配置

4.1 简述:SpringBoot自动配置的原理

在Springboot启动的时候,会用到核心注解@SpringBootApplication,这个注解中有一个自动配置注解@EnableAutoConfiguration,自动配置注解会自动寻找spring.factories 和 AutoConfiguration.imports 文件中的xxxAutoConfiguration自动配置类,在自动配置中使用@Bean注解把一些配置类和bean对象放到了Spring容器中,就完成了自动配置

  • 自动配置注解:@EnableAutoConfiguration
  • 自动配置文件:spring.factories 和 AutoConfiguration.imports 文件
  • 自动配置类:xxxAutoConfiguration(@Bean).
注解说明
@Bean告诉方法,产生一个Bean对象并交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后被放在Spring容器中。

4.2 源码跟踪

spring.factories
Spring Boot 中的SPI 机制(Java SPI 机制):为某个接口寻找服务的实现的机制,类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制很重要。

  • 当需要实现SDK 或Sring boot starter 给别人调用,使用Factories机制(Spring Boot 中的SPI 机制)可以让SDK或Stater的使用只需很少或不需要进行配置,只需在服务中引入我们的Jar包就即可。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

SpringBoot With IoC,DI, AOP,自动配置

文章目录1 IoC(Inverse Of Controller)2 DI(Dependency Injection)3 AOP(面向切面编程)3.1 什么是AOP?3.2 AOP的作用?3.3 AOP的核心概念3.4 AOP常见通知类型3.5 切入点表达式4 自动配…...

ggplot2的组图拓展包(1):patchwork(上篇)

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集patchwork是ggplot绘图系统的拓展包,主要功能是将多个ggplot格式的图形组合成一幅大图,即组图。patchwork工具包十分好用,它主要利用几个类似四则运算符号的操作符进行组图&…...

Python 异步: 异步迭代器(15)

动动发财的小手,点个赞吧! 迭代是 Python 中的基本操作。我们可以迭代列表、字符串和所有其他结构。 Asyncio 允许我们开发异步迭代器。我们可以通过定义一个实现 aiter() 和 anext() 方法的对象来在 asyncio 程序中创建和使用异步迭代器。 1. 什么是异步…...

HD-G2L-IOT V2.0核心板MPU压力测试

1. 测试对象HD-G2L-IOT基于HD-G2L-CORE V2.0工业级核心板设计,双路千兆网口、双路CAN-bus、2路RS-232、2路RS-485、DSI、LCD、4G/5G、WiFi、CSI摄像头接口等,接口丰富,适用于工业现场应用需求,亦方便用户评估核心板及CPU的性能。H…...

scikit-image:遥感图像geotiff格式转mat格式

scikit-imagescikit-image 是一个专门用于图像处理的 Python 库,它可以与 Scipy 库和其他可能有助于计算的 Python 库一起使用。Github地址:https://github.com/scikit-image/scikit-image Star有5.3k首先pip安装scikit-image包,或者直接使用…...

吉利银河L7、长城哈弗B07、比亚迪宋Plus DM-i,自主品牌决战混动

2月23日,吉利推出全新的中高端新能源产品序列——吉利银河。当日,吉利推出了首款智能电混SUV「银河L7」,新车将在二季度交付。本月10日,长城汽车也计划举办智能新能源干货大会,其「颠覆技术」等宣传直面新一代的新能源…...

附录3:说一说 Ambari 视图编译相关

一、Ambari View Ambari 视图,即 Ambari Views 。其实 Ambari 视图并不是很好用,所以大部分人很自然地就把 Ambari 视图给忽略了,心里会冒出一句:“还有这东西?”。然而作为 Ambari 的一部分,今天还是要讲一下,万一有人追求 Ambari 完整性,要编译并安装汉化他们呢? …...

Arduino双色LED实验记录

接线图片:双色LED实物和布线有区别:代码:int RED_LED 11; //设置红色为11 int GREEN_LED 10; //设置绿色为10 int val 0;//全局变量val void setup() {// put your setup code here, to run once:pinMode(RED_LED,OUTPUT);//引脚配置pinMo…...

flex布局

十分简单灵活,区区几行代码都可以实现各种页面的布局,曾经学习页面布局时候,深受float、display、position这些属性的困扰,但是学习flex布局,只需要学习几个CSS属性,就可以写出简介优雅复杂的页面布局。 F…...

【操作系统原理实验】命令解释器模拟实现

选择一种高级语言如C/C等,编写一类似于DOS、UNIX中的命令行解释程序。 1)设计系统命名行提示符; 2)自定义命令集(8-10个); 3)用户输入help命令以查找命令的帮助; 4)列出命令的功能,区分内部命令…...

使用nvm管理node版本

下载nvm版本参考文章:https://blog.csdn.net/langmanboy/article/details/126357952下载安装选择nvm的目录为d:\nvm,nodejs的目录为d:\nodejs:v14.0.0:执行nvm install 14生成的目录v16.0.0:执行nvm install 16生成的目…...

jQuery BootStrap

1、jQuery的使用方式 1、下载jQuery库文件 网址 2、将下载好的js文件放到项目中&#xff0c;并引入到需要的HTML文件中 3、使用jQuery 注意&#xff1a;jQuery库文件的导入必须在自己写的代码之前。就绪函数在页面上可以写n个。 <!DOCTYPE html> <html lang"en…...

Vue2.0开发之——购物车案例-Footer组件封装(50)

一 概述 导入Footer子组件定义fullState计算属性把全选状态传递给Footer子组件实现全选功能 二 导入Footer子组件 2.1 App.vue中导入Footer组件 import Footer from "/components/Footer/Footer.vue";2.2 App.vue中注册Footer子组件 components: {Header,Goods,F…...

HTML基本概述

文章目录网站和网页浏览器的作用HTML标签元素注释乱码问题web系统是以网站形式呈现的&#xff0c;而前端是以网页形式呈现的。 网站和网页 网站&#xff08;web site&#xff09;&#xff1a;互联网上用于展示特定内容的相关网页的集合。也就是说&#xff0c;一个网站包含多个…...

Vue 3.0 响应式 计算和侦听 【Vue3 从零开始】

本节使用单文件组件语法作为代码示例 #计算值 有时我们需要依赖于其他状态的状态——在 Vue 中&#xff0c;这是用组件计算属性处理的&#xff0c;以直接创建计算值&#xff0c;我们可以使用 computed 方法&#xff1a;它接受 getter 函数并为 getter 返回的值返回一个不可变的…...

1.mbedtls移植到STM32

mbedtls学习笔记 1.关于mbedtls2.STM32移植方法2.1STM32cubemx移植2.2手动移植12.3移植总结2.4手动移植22.4.1移植方式22.4.2测试SHA1加密1.关于mbedtls 1.主要提供了的 SSL/TLS 支持(在传输层对网络进行加密),各种加密算法,各种哈希算法,随机数生成以及 X.509(密码学里…...

模块、包和异常

目录1.模块import 导入from...import 导入2. 模块的搜索顺序3. __name__属性的使用4. 包包的使用步骤5. 发布模块6. 安装模块7. 卸载模块8. pip 安装第三方模块9. 异常处理异常捕获异常的传递抛出 raise 异常1.模块 模块是 Python 程序架构的一个核心概念 每一个以扩展名 py …...

RocketMQ控制台的安装与启动

RocketMQ控制台的安装与启动下载修改配置开放端口号重启防火墙添加依赖编译 rocketmq-dashboard运行 rocketmq-dashboard本地访问rocketmq无法发送消息失败问题。connect to &#xff1c;公网ip:10911&#xff1e; failed下载 下载地址 修改配置 修改其src/main/resources中…...

pytorch安装的超级详细教程(没有之一)

一、发展历程 &#xff08;简单介绍&#xff09; (15年)caffe --> (16年)tensorflow1.x --> (17年)keras --> (18年)Tensorflow2.x --> (19年)pytorch。 面向gihub开源项目编程。 向下支持比较好&#xff0c;各个版本之间支持比较好&#xff0c;兼容性强。 版本…...

leetcode两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…...

Ubuntu 20.04黑屏救星:手把手教你用tty2命令行重装NVIDIA驱动(附内核更新关闭指南)

Ubuntu 20.04黑屏救援实战&#xff1a;从tty2命令行到图形界面恢复全指南 当你满心欢喜地启动Ubuntu 20.04&#xff0c;准备开始一天的工作时&#xff0c;迎接你的却是一片漆黑——这是许多Linux用户都曾遭遇过的噩梦场景。NVIDIA驱动问题导致的系统黑屏不仅令人沮丧&#xff0…...

实战复盘:我是如何通过一个SSRF漏洞,利用Gopher协议拿下内网Redis的

从SSRF到内网Redis入侵&#xff1a;一次真实渗透测试的深度剖析 那天下午&#xff0c;我正在对某企业Web应用进行常规安全评估。一个看似普通的文件下载接口引起了我的注意——它接受URL参数并返回对应资源内容。直觉告诉我&#xff0c;这里可能存在SSRF漏洞。接下来的72小时&a…...

工程思维跨界精酿:从电路板到啤酒桶的系统化创新实践

1. 项目概述&#xff1a;从电路板到啤酒桶的跨界创业在圣保罗的某个欢乐时光里&#xff0c;几位刚结束一天工作的电气工程师&#xff0c;一边喝着工业拉格&#xff0c;一边抱怨着市面上千篇一律的啤酒风味。他们聊着示波器、PCB布线和信号完整性&#xff0c;也聊着麦芽的甜度、…...

【GD32】从零构建GD32开发环境(Keil 5)—— 固件库配置与工程创建实战

1. 为什么需要配置固件库&#xff1f; 刚接触GD32单片机的朋友可能会有疑问&#xff1a;为什么不能直接在Keil里写代码&#xff1f;这就好比装修房子&#xff0c;固件库就像是提前准备好的建材包&#xff0c;里面已经包含了墙面涂料、地板材料、门窗框架等标准件。如果每次开发…...

5分钟终极指南:用Nexus Mods App告别模组管理噩梦

5分钟终极指南&#xff1a;用Nexus Mods App告别模组管理噩梦 【免费下载链接】NexusMods.App Home of the development of the Nexus Mods App 项目地址: https://gitcode.com/gh_mirrors/ne/NexusMods.App 还在为游戏模组冲突、依赖缺失而烦恼吗&#xff1f;Nexus Mod…...

2025年英雄联盟国服内存级换肤技术深度解析:R3nzSkin架构设计与实现

2025年英雄联盟国服内存级换肤技术深度解析&#xff1a;R3nzSkin架构设计与实现 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 你是否曾想过&#xff…...

人工智能【第22篇】Seq2Seq模型与注意力机制:机器翻译的基石

作者的话&#xff1a;在前面的文章中&#xff0c;我们学习了RNN、LSTM以及NLP的基础知识。现在让我们进入NLP的核心应用——机器翻译。Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型是机器翻译的基石&#xff0c;而注意力机制&#xff08;Attention&#xff09;的出…...

AI辅助构建复古像素风Hacker News聚合器:全栈开发实战

1. 项目概述&#xff1a;一个AI驱动的复古风Hacker News聚合器最近在逛Hacker News的时候&#xff0c;我总感觉“Show HN”板块里那些有趣的个人项目像流星一样&#xff0c;刷一下就过去了&#xff0c;想回头再找特别费劲。作为一个喜欢折腾的开发者&#xff0c;我就在想&#…...

Java基础全套教程(三)—— 控制语句、方法、递归算法

Java基础全套教程&#xff08;三&#xff09;—— 控制语句、方法、递归算法 本章是Java编程从基础语法走向逻辑编程的核心转折点。前面我们学习了变量、数据类型、运算符&#xff0c;只能实现简单的顺序执行代码。而真正的程序&#xff0c;需要具备判断能力、重复执行能力、代…...

Flink:Keyed State vs Operator State 原理与实践

一、引言在 Flink 实时计算的世界里&#xff0c;流处理的本质可以概括为公式&#xff1a;实时流处理 业务逻辑 状态&#xff08;State&#xff09;。无论是窗口聚合、双流 Join 还是复杂的 CEP 模式匹配&#xff0c;都离不开状态管理。Flink 提供了两种基本的状态类型&#x…...