2022-09-10 11:10阅读: 229评论: 0推荐: 0

spring-boot自动配置原理

  1. SpringBoot启动会加载大量的自动配置类

  2. 我们需要看我们需要的功能有没有在Spri ngBoot默认写好的自动配置类

  3. 我们再来看这个自动配置类中到底配置了哪些组件(只要我们需要用的组件存在在其中,我们就不需要再手动配置了)

  4. 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;

     

     

    xxxxAutoConfigurartion:自动配置类;给容器中添加组件

     

    xxxxProperties:封装配置文件中相关属性;

    在application.yaml 配置

     

     

     

    对应dispatch 都可以在properties找到

     

     

 

此图基于b站狂神讲解的SpringBoot自动装配原理:

 

2022-10-21

SpringBoot自动装配原理我看了很多文章,也有了很多想法。

我觉得写的比较好的是Guide哥写的 :https://www.cnblogs.com/javaguide/p/springboot-auto-config.html

以下是对它的文章的部分引用。有兴趣的可以看看。
使用过 Spring 的小伙伴,一定有被 XML 配置统治的恐惧。即使 Spring 后面引入了基于注解的配置,我们在开启某些 Spring 特性或者引入第三方依赖的时候,还是需要用 XML 或 Java 进行显式配置。

举个例子。没有 Spring Boot 的时候,我们写一个 RestFul Web 服务,还首先需要进行如下配置。

@Configuration
public class RESTConfiguration
{
@Bean
public View jsonTemplate() {
MappingJackson2JsonView view = new MappingJackson2JsonView();
view.setPrettyPrint(true);
return view;
}
@Bean
public ViewResolver viewResolver() {
return new BeanNameViewResolver();
}
}
spring-servlet.xml
<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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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.xsd
http://www.springframework.org/schema/mvc/ http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.howtodoinjava.demo" />
<mvc:annotation-driven />
<!-- JSON Support -->
<bean name="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean name="jsonTemplate" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
</beans>

但是,Spring Boot 项目,我们只需要添加相关依赖,无需配置,通过启动下面的 main 方法即可。

@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

并且,我们通过 Spring Boot 的全局配置文件 application.propertiesapplication.yml即可对项目进行设置比如更换端口号,配置 JPA 属性等等。

我们先看一下 SpringBoot 的核心注解 SpringBootApplication

大概可以把 @SpringBootApplication看作是 @Configuration@EnableAutoConfiguration@ComponentScan 注解的集合。根据 SpringBoot 官网,这三个注解的作用分别是:

  • @EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
  • @Configuration:允许在上下文中注册额外的 bean 或导入其他配置类
  • @ComponentScan: 扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描启动类所在的包下所有的类 ,可以自定义不扫描某些 bean。如下图所示,容器中将排除TypeExcludeFilterAutoConfigurationExcludeFilter

@EnableAutoConfiguration 是实现自动装配的重要注解,我们以这个注解入手。

@EnableAutoConfiguration:实现自动装配的核心注解

EnableAutoConfiguration 只是一个简单地注解,自动装配核心功能的实现实际是通过 AutoConfigurationImportSelector

AutoConfigurationImportSelector 类实现了 ImportSelector接口,也就实现了这个接口中的 selectImports方法,该方法主要用于获取所有符合条件的类的全限定类名,这些类需要被加载到 IoC 容器中

重点关注一下getAutoConfigurationEntry()方法,这个方法主要负责加载自动配置类的。

主要的调用链如下:

自动配置不用启动全部加载,自动配置类其实就是通过@Conditional按需加载的配置类(@ConditionalOnXXX 如:@ConditionalOnBean:当容器里有指定 Bean 的条件下;@ConditionalOnClass:当类路径下有指定类的条件下 ),想要其生效必须引入spring-boot-starter-xxx包实现起步依赖。

本文作者:JayZzzWh

本文链接:https://www.cnblogs.com/JayZzzWh/p/16676201.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   JayZzz  阅读(229)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 阴天快乐 yihuik苡慧
  2. 2 依然爱你 yihuik苡慧
  3. 3 1 AM thomeboydontkill
  4. 4 我发现你 Fine乐团
  5. 5 胡言乱语 Fine乐团
  6. 6 回答 YOUNG
  7. 7 告诉你我多想你 王子明,杀不死Subs
  8. 8 Busy Body Claire Ridgely
  9. 9 不值得你喜欢 王子明,7copy,WYAN王毓千
  10. 10 Admiration T.Yee,奚缘
  11. 11 Letting Go 刘大拿
  12. 12 Lover Boy 88 Higher Brothers,Phum Viphurit
  13. 13 暴风雨 Higher Brothers,HARIKIRI
  14. 14 Diamond Higher Brothers
依然爱你 - yihuik苡慧
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 王力宏

作曲 : 王力宏

原唱 : 王力宏

一闪一闪亮晶晶 留下岁月的痕迹

我的世界的中心 依然还是你

一年一年又一年 飞逝仅在一转眼

唯一永远不改变 是不停地改变

我不像从前的自己 你也有点不像你

但在我眼中你的笑 依然的美丽

日子只能往前走 一个方向顺时钟

不知道爱有多久 所以要让你懂

我依然爱你 就是唯一的退路

我依然珍惜 时时刻刻的幸福

你每个呼吸 每个动作 每个表情

到最后 一定会 依然爱你

我不像从前的自己 你也有点不像你

但在我眼中你的笑 依然的美丽

日子只能往前走 一个方向顺时钟

不知道爱有多久 所以要让你懂

我依然爱你 就是唯一的退路

我依然珍惜 时时刻刻的幸福

你每个呼吸 每个动作 每个表情

到最后 一定会 依然爱你

我依然爱你 或许是命中注定

多年之后任何人 都无法代替

那些时光 是我这一辈子最美好的

那些回忆 依然无法忘记

我依然爱你 就是唯一的退路

我依然珍惜 时时刻刻的幸福

你每个呼吸 每个动作 每个表情

到最后 一定会 依然爱你

你每个呼吸 每个动作 每个表情

到永远 一定会 依然爱你