springboot的自动装配原理(springboot自动装配原理过程)

来自:    更新日期:早些时候
~ springboot自动装配原理面试回答是什么?

SpringBoott自动装配原理主要解决了传统spring的重量级xml配置Bean.实好猜现了自动装配;所以,我们也常在面试中被问到SpringBoot是如何实现自动装配。

springboo的介绍

SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。

另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好物绝的解决。?SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置,开箱即用,Outofbox,是指在开发过程中。

通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。

这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。约定优于配置,Conventionoverconfiguration,是一种由SpringBoot本身来配罩袜姿置目标结构。

SpringBoot自动装配原理

初看@SpringBootApplication有很多的注解组成,其实归纳就是一个"三体"结构,重要的只有三隐含指个Annotation:

(1)@Configuration注解

(2)@ComponentScan

(3)@EnableAutoConfiguration

从源码中可以知道,最关键的要属@Import(EnableAutoConfigurationImportSelector.class),借助EnableAutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的灶配@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。同时借助于Spring框架原有的一个工具类:SpringFactoriesLoader,@EnableAutoConfiguration就可以实现智能的自动配置。

总结:@EnableAutoConfiguration作用就是从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(JavaRefletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。这些功能配置类要生效的话,会去classpath中找是否有该类的依赖类(也就是pom.xml必须有对应功能的jar包才行)并且配置类里面注入了默认属性值类,功能类可以引用并赋默认值。生成功能类的原则是自定义优先,没有自定义时才会使用自动装配类。

1、从spring-boot-autoconfigure.jar/META-INF/spring.factories中获取redis的相关配置类全限定名(有120多个的配置类)RedisAutoConfiguration,一般一个功能配置类围绕该功能,负责管理创建多个相关的功能类,比如RedisAutoConfiguration负责:JedisConnectionFactory、RedisTemplate、StringRedisTemplate这3个功能类的创建

2、RedisAutoConfiguration配置类生效的一个条件是在classpath路径下有RedisOperations类存在,因此springboot的自动装配机制会会去classpath下去查找对应的class文件。

3.如果pom.xml有对应的jar包,就能匹配到对应依赖class,

4、匹配成功,这个功能配置类才会生效,同时会注入默认的属性配置类@EnableConfigurationProperties(RedisProperties.class)

5.Redis功能配置里面会根据条件生成最终的JedisConnectionFactory、RedisTemplate,并提供了默认的配置形式@ConditionalOnMissingBean(name="redisTemplate")

6.最终创建好的默认装配类,会通过功能配置类里面的@Bean注解,注入到IOC当中

7.用户使用,当用户在配置文件中自定义时候就会覆盖默认的配置@ConditionalOnMissingBean(name="redisTemplate")

1.通过各种注解实现了类与类之间的依赖关系,容器在启动的老斗时候Application.run,会调用EnableAutoConfigurationImportSelector.class的selectImports方法(其实是其父类的方法)--这里需要注意,调用这个方法之前发生了什么和是在哪里调用这个方法需要进一步的探讨

2.selectImports方法最终会调用SpringFactoriesLoader.loadFactoryNames方法来获取一个全面的常用BeanConfiguration列表

3.loadFactoryNames方法会读取FACTORIES_RESOURCE_LOCATION(也就是spring-boot-autoconfigure.jar下面的spring.factories),获取到所有的Spring相关的Bean的全限定名ClassName,大概120多个

4.selectImports方法继续调用filter(configurations,autoConfigurationMetadata);这个时候会根据这些BeanConfiguration里面的条件,来一一筛选,最关键的是

@ConditionalOnClass,这个条件注解会去classpath下查找,jar包里面是否有这个条件依赖类,所以必须有了相应的jar包,才有这些依赖类,才会生成IOC环境需要的一些默认配置Bean

5.最后把符合条件的BeanConfiguration注入默认的EnableConfigurationPropertie类里面的属性值,并且注入到IOC环境当中

springboot自动装配原理@EnableAutoConfiguration

1、springboot启动会加载大量的自动配弯弊盯置类:(在下面的spring.factories文件中)

2、通过@ConditionalOnXXX判断我们是否导入了相关的功能(卜键就是pom文件中的starter),如果导入了,就会自动配置。

4、给容器中添加自动配置类的时候,埋和会从XXXProperties类中获取某些属性。我们只需要在配置文件中指定这些属性即可,如果没指定就会用默认值。

XXXA

比如:server.port

最后,通过配置:debug=true

可以查看失效和未生效的类(spring.factories文件中的)




springboot的自动装配原理(springboot自动装配原理过程)视频

相关评论:
  • 13055144858springboot自动装配(springboot自动装配过程)
    彭哀园SpringBoot是Spring的包装,通过自动配置使得SpringBoot可以做到开箱即用,上手成本非常低,但是学习其实现原理的成本大大增加,需要先了解熟悉Spring原理。SpringBoot自动配置\/装配(SPI)1、这里报错了,原因是只导入了一个bean而SpringBoot无法启动服务器解决办法一:将@Import改成@ConponentScan这样就会扫描同级...

  • 13055144858springboot的自动装配原理(springboot自动装配原理过程)
    彭哀园SpringBoot自动装配原理初看@SpringBootApplication有很多的注解组成,其实归纳就是一个"三体"结构,重要的只有三隐含指个Annotation:(1)@Configuration注解 (2)@ComponentScan (3)@EnableAutoConfiguration 从源码中可以知道,最关键的要属@Import(EnableAutoConfigurationImportSelector.class),借助EnableA...

  • 13055144858玩转Spring Boot 原理篇(自动装配前凑之自定义Stater)
    彭哀园自定义Spring Boot Starter实现 按照葫芦画瓢的思路,我们将创建一个猜数字游戏服务的自定义Starter。首先,定义项目结构,添加依赖配置,创建Service和自动配置类,设置条件注解以实现自动装配功能。接着,编写配置文件和自动装配类,完成自动装配的机制。在完成自定义Starter的构建后,我们将该Starter引入到游...

  • 13055144858springboot自动加载原理?
    彭哀园所以,自动配置真正实现是从classpath中搜寻所有的META-INF\/spring.factories配置文件,并将其中对应的org.springframework.boot.autoconfigure包下的配置项通过反射实例化为对应标注了@Configuration的javaConfig形式的IOC容器配置类,然后将这些都汇总成为一个实例并加载到IOC容器中。结论:1.SpringBoot在启动的...

  • 13055144858Spring Boot自动装配原理探究
    彭哀园首先,Spring Boot的自动装配是基于Spring框架原有的自动装配功能,并通过引入SPI机制进行优化。启动时,它会扫描外部jar包中的META-INF\/spring.factories文件,根据其中的配置信息动态地将第三方组件注入到Spring容器中,无需手动配置即可直接使用。Spring Boot自动装配主要通过@SpringBootApplication注解实现,它...

  • 13055144858SpringBoot的自动装配
    彭哀园SpringBoot中的条件注解包括:ComponentScan注解用于定义扫描路径,找出需要自动装配的类并添加至Spring容器。通常使用@Controller、@Service、@Repository、@Component注解标识的类会被自动装配。ComponentScan通过includeFilters加入未标注上述注解的类,excludeFilters过滤掉不需加入容器的类。

  • 13055144858springboot自动装配注解?
    彭哀园SpringBoot的自动装配(一) 一、什么是SpringBoot的自动装配 ??SpringBoot的自动装配是指:SpringBoot会自动将一些配置类的bean注册到ioc容器,我们可以在需要的地方使用@Autowired或@Resource等注解来使用它。 ??自动的表现形式就是我们只需要引我们享用功能的包,其他的配置完全不需要管,springboot会自动注入这些配置备案...

  • 13055144858springboot自动部署(springboot自动装载)
    彭哀园SpringBoot+Docker项目打包(jar)和部署1、如下图所示,打包完会出现一个.jar文件,即打包好的jar包。在控制台输入:java-jar\/Users\/heyou\/Desktop\/springboot-0.0.1-SNAPSHOT.jar来检查jar包是否可以正常运行。2、可以输入dockerversion查看docker安装版本确定系统安装过maven环境。3、部署操作步骤:起一...

  • 13055144858Spring注解(spring注解自动装配)
    彭哀园@SpingBootApplication:SpringBoot的核心注解,主要目的是开启自动配置。它也是一个组合注解,主要组合了@Configurer,@EnableAutoConfiguration(核心)和@ComponentScan。可以通过@SpringBootApplication(exclude={想要关闭的自动配置的类名.class})来关闭特定的自动配置。 @ImportResource:虽然Spring提倡零配置,但是还是提供了对xm...

  • 13055144858Spring自动装配原理
    彭哀园EnableAutoConfiguration :开启自动配置功能 以前我们需要自己配置的东西,而现在SpringBoot可以自动帮我们配置 ;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效;点进注解接续查看: @AutoConfigurationPackage :自动配置包 import :Spring底层注解@import , 给容器中导入...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网