SpringBoot学习之路(一)自动装配

SpringBoot自动装配原理 配合@EnableAutoConfiguration注解使用时,它主要扮演的是配置查找器的角色。这个注解利用其自身的完整类名org.springframework.boot.autoconfigure.EnableAutoConfiguration作为搜索的关键词(Key),来定位并加载一组相关的@Configuration类。SpringBoot的自动装配主要依赖于Spring框架的条件配置(Conditional Configuration)和Java的配置类(Java Config)功能。 阅读详情

本系列文章主要为了记录学习SpringBoot的知识点,基本来自慕课网小马哥视频Spring Boot2.0深度实践之核心技术篇

1 Spring模式注解自动装配

任何被 @Component 标准的组件均为组件扫描的候选对象

1.1 装配方式

  • <context:component-scan>方式,即传统配置xml方式
  • @CompoentScan方式
@ComponentScan(basePackages = "com.imooc.dive.in.spring.boot")
public class SpringConfiguration {
...
}

1.2 自定义模式注解

可以通过自定义注解继承Component注解,继承关系为

  • Component
    • Repository
      • FirstLevelRepository
/**
* 一级 {@link Repository @Repository}
*
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
* @since 1.0.0
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repository
public @interface FirstLevelRepository {
String value() default "";
}

2 Spring @Enable模块装配

@Version Spring Framework 3.1
为了方便组件管理,以模块的形式合并方便统一装配

2.1 注解驱动方式

即将需要装配的类统一加到模块开关注解中

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(DelegatingWebMvcConfiguration.class, other.class)
public @interface EnableWebMvc {
}

在需要装配的类中可以打上@Component("name")用于给类命名,也可以不打,这样只能用类的类型来获取了

2.2 接口编程方式

本质上和2.1类似,只是多引入了一个类用以实现接口方法

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(HelloWorldImportSelector.class)
public @interface EnableHelloWorld {
}

public class HelloWorldImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        String[] s =  new String[]{DelegatingWebMvcConfiguration.class.getName(), 
        	other.class.getName()};
        return s;
    }
}

3 Spring条件装配

@Profile 3.1
@Conditional 4.0

3.1 Profile

条件装配可以使用在针对同一接口有多种实现方法,然后在实现方法上打上@Profile("java8"),然后在启动SpringBoot时,调用.profiles("java8")即可启用该装配,注意该方法可以重复调用,这样可以选择多种profile条件。

3.2 Conditional

基于某种更加自定义形式的条件可以用Conditional.首先自定义条件注解类和条件类,然后在条件类中自定义函数,用以判断类是否可以被装配。然后在需要装配的bean中打上自定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Conditional(OnSystemPropertyCondition.class)
public @interface  ConditionalOnSystemProperty {
    String name();

    String value();
}

public class OnSystemPropertyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {

        Map<String, Object> map = annotatedTypeMetadata
        .getAnnotationAttributes(ConditionalOnSystemProperty.class.getName());
        String propertyName = String.valueOf(map.get("name"));
        String propertyValue= String.valueOf(map.get("value"));
        String javaPropertyValue = System.getProperty(propertyName);
        return propertyValue.equals(javaPropertyValue);
    }
}

@Bean
@ConditionalOnSystemProperty(name = "user.name", value = "Administrator")
String helloWorld() {
    return "Hello World";
}

4 SpringBoot自动装配

自动装配集成了上述所有注解方式,可以选择多种也可以不选

  1. 要想实现自动装配首先需要在启动类中打开自动装配@EnableAutoConfiguration,注意在一般启动类中@SpringBootApplication已经继承了@EnableAutoConfiguration
  2. 然后在resources/META-INF/spring.factories中添加所有需要自动装配的类名
  3. 在类中可以添加想要的bean,也可以在该类上集成其他的注解方式
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.imooc.diveinsprintboot.configuration.HelloWorldAutoConfiguration,\
other name

@Configuration("zzz") //用于给该bean定义名字,可选
@EnableHelloWorld  //模块注解 可选
@ConditionalOnSystemProperty(name = "user.name", value = "Administrator") //条件注解 可选
public class HelloWorldAutoConfiguration {
    @Bean
    public String helloWorld(){
        return "Hello World!";
    }
}
从仿真到实践:两级直接耦合放大电路的静态工作点协同调试指南 本文详细解析了两级直接耦合放大电路的静态工作点协同调试方法,从仿真到实践提供系统指南。重点介绍了Rc2电阻调整技巧、集电极电位测量方法及常见问题排查,帮助工程师解决各级静态工作点相互影响的难题,提升模拟电路设计效率。 阅读详情

相关推荐

CANFD升级踩坑实录:DBC转换时DLC大于8的信号怎么处理?

本文详细探讨了CANFD升级过程中DLC大于8的信号处理问题,提供了工程化解决方案和AutoSar BSW层配置要点。通过分析CAN与CANFD的DLC本质差异,提出信号拆分重组、DLC重映射和协议层适配三种策略,并给出验证与测试方案,帮助开发者避免数据截断和通信故障。

weixin_42521843的博客 228

Springboot自动装配

自动装配是springboot的核心,一般提到自动装配就会和springboot联系在一起。实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。

纯洁的小魔鬼 5098

三维荧光光谱(EEM)散射干扰实战:从识别到精准切除的完整流程

本文详细解析三维荧光光谱(EEM)中散射干扰的识别与精准切除流程,涵盖瑞利散射和拉曼散射的实战处理技巧。通过drEEM工具箱的应用示例和高级场景解决方案,帮助研究者有效消除散射干扰,提升数据准确性,特别适用于环境样品和生物活体样本分析。

weixin_42554042的博客 327

springBoot自动装配

为了简化配置,使spring的使用更加方便,例如:可以回忆一下springboot中是如何继承redis的。使用springboot后集成常用的第三方框架变得非常简单了。springboot starter带来的问题starter使SpringBoot集成第三方框架变得简单,但对刚刚上手SpringBoot的人来说,可能只知道配置属性是在application.xml或application.yml中添加,但他们各自的属性都有哪些,具体怎么配置,却无从下手。

qq_62898618的博客 1万+

unity shader 后处理实现水墨风格渲染「Low Poly 」变「水墨画 」

水墨风格渲染 这次学校的比赛打算做一个中国古代背景的游戏,所以尝试做了水墨风格的渲染。 主要按以下四步来实现的效果: 根据色调和饱和度调整饱和度。 对图像进行模糊 水墨风格的物体边缘 物体内画笔笔触的模拟 接下来我分别就这四步依次展开说明: 调整饱和度 这里我使用Post-Processing Stack 的Color Grading 来调节饱和度,通过使用Grading Curv...

九级铁甲蛹的博客 1万+

单细胞数据分析(三):单细胞聚类分析

本文介绍了单细胞聚类分析的基本概念及其在单细胞RNA测序(scRNA-seq)数据中的应用。单细胞聚类分析通过将具有相似基因表达模式的细胞分组到不同的簇中,帮助识别细胞类型、状态和功能。文章详细展示了使用R语言中的Seurat包进行单细胞数据聚类分析的步骤,包括数据加载、降维、聚类和结果可视化。通过FindNeighbors和FindClusters函数,文章展示了如何基于降维数据进行细胞聚类,并选择合适的分辨率值。

专注生信领域 1897

SpringBoot 自动装配原理 & 自定义一个 starter

SpringBoot 项目的 pom.xml 文件通过 parent 模块加载配置文件和插件,并依赖 dependencies 模块管理依赖版本,避免了手动指定版本。resources 标签采用顺序合并策略,分别处理配置文件和其他资源文件,确保配置文件的动态替换和其他资源的原样复制。启动器(如 spring-boot-starter-web)简化了依赖管理,主程序通过 @SpringBootApplication 注解启动应用。@SpringBootApplication 是复合注解,包含 @SpringB

sco5282的博客 1372

一文吃透 Tools for Applying SAP Notes:从 SNOTE、TCI 到 Solution Manager 与 SAP Cloud ALM

本文系统梳理了SAP技术与运维团队应用SAP Notes的高效工具与方法,涵盖On-Premise与云环境。文章首先阐述了精研SAP Notes工具的必要性,指出其是实施错误修复、法务变更和性能改进的关键载体。随后详细介绍了SNOTE、TCI、Solution Manager、Cloud ALM和Maintenance Planner等核心工具的定位与适用场景,并通过采购异常案例展示了标准更正流程。针对复杂修复场景,文章提出了TCI的批量处理方案,并强调将Note实施纳入变更治理流程的重要性。最后总结了三种

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 346

SpringBoot的自动装配

SpringBoot自动装配: SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的文件,将文件中配置的类型信息加载到 Spring 容器,并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot。

景川的博客 2483

我用 Python 把 Claude 变成了 “代码审查员“:每次提交前 AI 先 Review,Bug 漏网率降了 80%

这是成败的关键。我们需要给 Claude 立规矩,让它像一个严格的架构师那样思考。你是一名资深的首席软件架构师和安全专家。请审查以下 Git Diff 代码变更。你的任务是:1. **安全性检查**:寻找 SQL 注入、XSS、硬编码密钥、敏感信息泄露等。2. **潜在 Bug**:空指针、资源未关闭、竞态条件、逻辑死循环。3. **代码质量**:命名规范、冗余代码、可读性差、缺乏注释。4. **性能优化**:不必要的数据库查询、低效算法。

BUG猿的博客 142

ofd转pdf报错:org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress【已解决】

ofd转pdf报错:java.lang.NoClassDefFoundError:org/apache/commons/io/function/IOIterator at org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress,java.lang.NoSuchMethodError:org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry()

黄团团的个人博客 1283

Spring Boot自动装配原理详解

Spring Boot的自动装配和启动过程,全网最简洁清晰的原理拆解。

BugMan的博客 3975

thermal系列(5)-DTSI中配置Thermal

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录thermal系列目录DTSI中配置ThermalDTSI节点类型描述CPU0的配置举例CPU核hot-plugging举例修改热缓解阈值DTSI的node中带有tracks-lowDTSI中关闭某个Thermal Zones thermal系列目录 thermal系列(1)-引言部分 thermal.

fulinux的博客 1229

SpringBoot 学习(一)自动装配

springboot 启动时从 spring.factories 获取目标类(组件)的全限定名,将其添加到容器。查找并加载所有可用的初始化器,设置到 initializers 中。查找所有应用程序监听器,设置到 listeners 中。判断此应用是普通 Java 项目还是 Web 项目。推断并设置 main 方法的定义类,找到主类。springboot 的启动场景,功能场景。添加某功能对应的启动器依赖即可使用此功能。启动应用监听器、获取装配环境参数等。:SpringBoot 配置类。

歪比巴卜 432

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SpringCloud学习记录一:SpringBoot自动装配原理及Starter实现

springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程 springboot帮我们做了什么 通常搭建一个基于spring的web应用,我们需要做以下工作: 1、pom文件中引入相关jar包,包括spring、springmvc、redis、mybaits、log4j、mysql-connector-java 等等相关jar … 2、配置web.xml,Listener配置、Filter配置、Servlet配置、log4j配置、error配置 … 3、配置数据库连接、配置

TSEAHT的博客 876

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

从零开始的Spring Boot学习【二】【自动装配(一)】

我们以前的web程序,是需要在webContext文件夹中配置web.xml,并且打成war包,然后部署到tomcat中。现在的Spring Boot很方便,内嵌了tomcat,上述的这些都不需要我们去做。 我们现在写一个Controller,并且运行Java Application,然后在网址上输入:http://localhost:8080/helloSpringBoot package...

KnightHONG的博客 715

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

springboot源码自动装配解析学习(标题一)

只为记录自己学习的知识总结分享,欢迎指正,共同学习提升。 废话不多上图: 创建一个Demo,进入到springboot主方法: 进入到@EnableAutoConfiguration利用@Import 注解将所有符合自动装配的Bean注入到IOC容器中 进入到AutoConfigurationImportSelector 类,第一句判断当前的系统是否禁用了自动装配的功能,如果被禁用:priva...

weixin_42178134的博客 283

Spring Boot 框架学习笔记(一)(SpringBoor 初识 & 自动装配原理)

Spring Boot 框架学习笔记(一)一. 回顾:Spring、SpringMVC1.1 Spring框架1.2 Spring MVC框架二. Spring Boot2.1 Spring Boot 诞生2.2 Spring Boot 的理解2.3 主要特性2.4 集成第三方框架步骤三. 缘起Hello World 一. 回顾:Spring、SpringMVC 1.1 Spring框架 Spring框架最核心特性IoC(控制反转)或者DI(依赖注入),以及AOP的容器框架。 它使得开发的耦合度降低,

qq_47267252的博客 627

SpringBoot 学习笔记(一)----SpringBoot自动装配原理

一、pom.xml文件几个核心依赖 1、spring‐boot‐starter‐parent 它的父项目spring-boot-dependencies管理Spring Boot应用里面的所有依赖版本 ,这样在dependencies里面管理的依赖都不需要写版本 2、spring-boot-starter-web web模块的场景启动器,帮我们导入了web模块正常运行所依赖的组件; Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starte

weixin_42878252的博客 175

Springboot源码学习(一): 自动装配原理

spring boot的理念是“约定大于配置”,通俗的说,就是spring boot为我们提供了一套默认的配置,不需要我们再去手动的配置xml配置文件,只有当spring boot默认提供的配置不满足我们的需求时,我们再去修改默认配置。 入口:组合注解 @SpringBootApplication 又引入了@EnableAutoConfiguration注解,我们来看这个注解干了什么事情 导入了AutoConfigurationImportSelector类 看看selectImports方

weixin_42017400的博客 168

springboot自动装配原理

springboot自动装配原理

qq_24078621的博客 1万+

【SpringBoot篇】springboot的自动装配原理

自动装配(Auto-Configuration)是Spring Boot框架的一个核心特性之一,它通过扫描应用程序的classpath和依赖关系,自动配置和装配Spring应用程序所需的各种组件在传统的Spring应用程序中,开发者需要手动配置大量的bean,例如数据源、事务管理器、视图解析器等。这些配置过程繁琐而容易出错,加大了开发难度和成本。而Spring Boot的自动装配机制则能够自动完成这些配置过程,使得开发者可以更加专注于业务逻辑的实现。

小吉妙妙屋 1万+

Springboot自动装配的原理

springboot在日常开发中减少了我们许多工作量减少了很多XML配置,这都得益于springboot自动装配的特性。 那么springboot是如何实现自动装配的呢 ? 首先我们浅显得介绍一些 springboot的一些主要注解: @Configuration 用于声明定义bean 这也是springboot 中的主要注解 其实就是平常Spring配置文件中我们写的bean @EnableAutoConfiguration 用来开启springboot自动配置的注解 ,这个也是自动装...

代码搬运工 2万+

SpringBoot源码学习之SpringBoot自动装配原理

经过上面的分析,其实SpringBoot的自动装配是通过实现的,它帮我们做的第一件事情,便是利用读取引入的各个Jar包中的META-INF/spring.factories文件中的配置类路径名。SpringBoot的自动装配,对于引入第三方组件来说是一大利器,只要遵循了规范,在其META-INF/spring.factories文件中定义好配置类Bean的全限定路径,自动装配便会逐一加载有效的候选类路径出来供给后面SpringBoot派生为BeanDefinition对象并创建为Bean对象。

qq_39108894的博客 1709

SpringBoot———自动装配原理

SpringBoot自动装配 主启动类上的注解@SpringBootApplication里的三个重要注解 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan @SpringBootConfiguration 源码是@Configuration:即对Spring原生注解的封装 @EnableAutoConfiguration @ComponentScan Spring原生注解之一,表示一个组件 总结 自动装配利用了SpringF

qq_45673367的博客 1万+

SpringBoot自动装配

1. 什么是 SpringBoot 自动装配? SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot。 没有 Spring Boot 的

学而不思则忘 5805
上一篇: Git学习之路
下一篇: SpringBoot学习之路(二) 理解SpringApplication
张小飘
博客等级 码龄11年 9粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值