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

广州萝岗区网站建设昆明软件开发公司做门户网站的

广州萝岗区网站建设,昆明软件开发公司做门户网站的,jquery动画特效网站,沈阳企业网站制作深入剖析 Spring Boot 自动装配原理(附源码与实战) Spring Boot 的**自动装配(Auto Configuration)是其核心特性之一,使得开发者无需手动配置复杂的 Bean,即可快速构建应用。但Spring Boot 是如何实现自动…

深入剖析 Spring Boot 自动装配原理(附源码与实战)

Spring Boot 的**自动装配(Auto Configuration)是其核心特性之一,使得开发者无需手动配置复杂的 Bean,即可快速构建应用。但Spring Boot 是如何实现自动装配的?它的底层原理是什么?我们又该如何自定义自动装配?**本文将从源码入手,深入剖析 Spring Boot 的自动装配原理,并通过代码实战加深理解。


1. 什么是自动装配?

在传统的 Spring 项目中,我们需要手动配置 Bean,例如 XML 或 Java 配置:

@Bean
public DataSource dataSource() {return new HikariDataSource();
}

而在 Spring Boot 中,这些 Bean 可以不写,Spring Boot 会自动装配合适的 Bean。例如,添加 spring-boot-starter-data-jpa 依赖后,Spring Boot 会自动配置 DataSource但我们从未在代码中显式定义它!


2. 自动装配的底层原理

Spring Boot 的自动装配基于**@EnableAutoConfiguration**,该注解的核心逻辑如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class) // 导入自动装配选择器
public @interface EnableAutoConfiguration {
}

2.1 @EnableAutoConfiguration 做了什么?

  1. @AutoConfigurationPackage:自动扫描并注册包路径下的组件。
  2. @Import(AutoConfigurationImportSelector.class):加载所有自动配置类。

其中,AutoConfigurationImportSelector 是 Spring Boot 自动装配的核心,负责加载 META-INF/spring.factories 里的自动配置类。


3. Spring Boot 如何加载自动配置类?

3.1 AutoConfigurationImportSelector 源码分析

AutoConfigurationImportSelector 通过 getAutoConfigurationEntry() 方法加载所有自动配置类:

@Override
protected AutoConfigurationEntry getAutoConfigurationEntry(AutoConfigurationMetadata metadata, AnnotationMetadata annotationMetadata) {List<String> configurations = getCandidateConfigurations(annotationMetadata, metadata);configurations = removeDuplicates(configurations);return new AutoConfigurationEntry(configurations, exclusions);
}

其中,getCandidateConfigurations() 方法会加载 spring.factories 文件:

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AutoConfigurationMetadata autoConfigurationMetadata) {return SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
}

3.2 spring.factories 文件

Spring Boot 的 spring-boot-autoconfigure.jar 包含 META-INF/spring.factories,里面定义了所有的自动装配类。例如:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

这意味着:Spring Boot 会自动加载 DataSourceAutoConfigurationHibernateJpaAutoConfiguration 等自动配置类。


4. 代码实战:自定义自动装配

假设我们希望 Spring Boot 在项目启动时自动装配一个自定义的 HelloService,而无需手动配置 Bean,我们可以按照以下步骤实现。

4.1 定义 HelloService

首先,创建一个简单的服务类:

public class HelloService {public String sayHello() {return "Hello, Spring Boot AutoConfiguration!";}
}

4.2 创建自动配置类

com.example.config 包下创建 HelloServiceAutoConfiguration,使用 @Configuration@ConditionalOnMissingBean,确保仅在没有用户手动定义 HelloService 时才进行装配:

@Configuration
public class HelloServiceAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic HelloService helloService() {return new HelloService();}
}

4.3 注册到 spring.factories

resources/META-INF/spring.factories 文件中,加入:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.config.HelloServiceAutoConfiguration

这样,Spring Boot 启动时,会自动加载 HelloServiceAutoConfiguration,并装配 HelloService

4.4 测试自动装配

创建 Spring Boot 启动类:

@SpringBootApplication
public class AutoConfigDemoApplication {public static void main(String[] args) {ApplicationContext context = SpringApplication.run(AutoConfigDemoApplication.class, args);HelloService helloService = context.getBean(HelloService.class);System.out.println(helloService.sayHello());}
}

运行后,输出:

Hello, Spring Boot AutoConfiguration!

这证明我们的 HelloService 已经被 Spring Boot 自动装配!


5. 自动装配的排除与自定义

5.1 排除特定的自动配置

如果不想让某些自动配置生效,可以使用 exclude

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MyApplication {
}

或者在 application.properties 中排除:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

5.2 查看已加载的自动配置

Spring Boot 提供 spring-boot-actuator 依赖,可以使用 /actuator/beans 查看已加载的自动配置 Bean:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

然后访问:

http://localhost:8080/actuator/beans

可以看到当前应用加载了哪些自动装配的 Bean。


6. 总结

  1. Spring Boot 通过 @EnableAutoConfigurationAutoConfigurationImportSelector 加载 spring.factories 中的自动配置类。
  2. 自动配置类使用 @ConditionalOnMissingBean 等注解,确保只有在必要时才进行装配。
  3. 可以自定义自动装配组件,让 Spring Boot 在启动时自动加载自定义 Bean。
  4. 可以使用 exclude 配置排除特定的自动装配类,避免不必要的 Bean 加载。

Spring Boot 的自动装配机制极大地简化了 Spring 应用的开发,同时提供了足够的扩展性,使开发者能够轻松地自定义和管理 Bean 配置。希望本文能帮助你深入理解 Spring Boot 自动装配的底层原理!🚀


📌 你学会了吗? 欢迎在评论区留言交流!🔥


文章转载自:

http://f80t9HZR.yLkkh.cn
http://AtnVMonp.yLkkh.cn
http://jxjyiVH1.yLkkh.cn
http://kqTaVV71.yLkkh.cn
http://BR9uKaxp.yLkkh.cn
http://85DkPNfN.yLkkh.cn
http://9Ongq0aJ.yLkkh.cn
http://S2bqsaXx.yLkkh.cn
http://fiNgWWZI.yLkkh.cn
http://mIFeQjSj.yLkkh.cn
http://W5DNgi96.yLkkh.cn
http://TzzxTxn6.yLkkh.cn
http://qMPc3OiE.yLkkh.cn
http://Z4lGHZKi.yLkkh.cn
http://FoIgh76E.yLkkh.cn
http://xjHr3HZQ.yLkkh.cn
http://zD2tUTic.yLkkh.cn
http://iKETUnE8.yLkkh.cn
http://j7Vsxyce.yLkkh.cn
http://4iNHl2VL.yLkkh.cn
http://tQwwoEzu.yLkkh.cn
http://Wc6O7p8r.yLkkh.cn
http://95nBQsXz.yLkkh.cn
http://NRGWva0E.yLkkh.cn
http://48p8Ep5n.yLkkh.cn
http://1bpC4Thj.yLkkh.cn
http://DsGmATNh.yLkkh.cn
http://8On3RXxl.yLkkh.cn
http://ltbh1d5i.yLkkh.cn
http://uaMTPkfp.yLkkh.cn
http://www.dtcms.com/wzjs/752737.html

相关文章:

  • 水文站网站建设应当坚持常德网站制作公司
  • 营销型网站试运营调忧公司网站案例展示
  • 网站服务器停止响应是什么意思网站布局设计步骤
  • 如何用c 做网站网站怎么排名
  • 企业网站小程序源码老旧小区改造国家最新政策
  • 模板网站对排名的影响海南发展
  • 兰州市城关区建设局网站巴中市住房和城乡建设局网站
  • 花钱做网站做视频网站视频的软件
  • 西安做网站公司哪家行怎么做页眉页脚
  • 库车县建设网站营销型网站建设xywlcn
  • html5视频网站模板中端网站建设
  • 昆山市住房和建设局网站网站开发做什么的
  • 做网站签到挣钱吗网页升级访问永久
  • 微表单网站网站充值链接怎么做
  • 南宁网站定制公司wordpress显示切换到桌面版
  • 免费网站制作报价wordpress 不能发送邮件
  • 网站建设微信运营推广重庆长寿网站设计公司哪家专业
  • 个人旅游网站模版c语言和网站建设的关系
  • asp网站开发教程百度云精美ppt模板免费下载百度云
  • 博海博海网站建设网站建设报价单模板
  • 资阳住房和城乡建设厅网站排版设计视频教程
  • 自已建网站卖东西要多少钱泰安网站建设优化案例报告
  • 公司门户网站模板网页设计图片排版怎么设置
  • wordpress建站插件安全有源码怎么搭建网站
  • 东营做网站公司网站颜色搭配表
  • 网站建设延期通知单关键词竞价排名
  • 林业网站建设方案做企业网站的轻量级cms
  • 重庆渝中区企业网站建设联系电话如何做企业网页
  • 公司手机网站建设网站开发雷小天
  • 网站开发相关书籍淘宝商城网站建设