当前位置:   article > 正文

面试官常问:你能说出SpringBoot自动装配的原理吗?_springboot自动装配原理面试

springboot自动装配原理面试

 SpringBoot之所以可以做到简化配置文件直接启动,无外乎是其内部的两种设计策略:开箱即用和约定大于配置

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

约定大于配置:由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。

@SpringBootApplication注解

它是一个组合注解,主要是由这么几个注解构成的。

  1. @SpringBootConfiguration//核心
  2. @EnableAutoConfiguration//核心
  3. @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
  4. @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

核心注解是@SpringBootConfiguration和@EnableAutoConfiguration

1、@SpringBootConfiguration

携带了一个@Configuration注解,代表自己是一个Spring的配置类。所以我们可以认为:@SpringBootConfiguration = @Configuration

2、@EnableAutoConfiguration

内部包含了两个注解,如下:

  1. @AutoConfigurationPackage //自动配置包
  2. @Import(AutoConfigurationImportSelector.class)//自动配置导入选择

它帮我们导入了AutoConfigurationImportSelector,这个类中存在一个方法可以帮我们获取所有的配置

  1. /*
  2. 所有的配置都存放在configurations中,
  3. 而这些配置都从getCandidateConfiguration中获取,
  4. 这个方法是用来获取候选的配置。
  5. */
  6. List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);

自动装配总结

SpringBoot所有自动配置类都是在启动的时候进行扫描并加载,通过spring.factories可以找到自动配置类的路径,但是不是所有存在于spring,factories中的配置都进行加载,而是通过@ConditionalOnClass注解进行判断条件是否成立(只要导入相应的stater,条件就能成立),如果条件成立则加载配置类,否则不加载该配置类。

  1.  SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
  2. 将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
  3. 以前我们需要自己配置的东西 , 自动配置类都帮我们解决了
  4. 整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
  5. 它将所有需要导入的组件以全类名的方式返回 , 这些组件就会被添加到容器中 ;
  6. 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
  7. 有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;

 为帮助开发者们提升面试技能、有机会入职BATJ等大厂公司,特别制作了这个专辑——这一次整体放出。

大致内容包括了: Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大厂面试题等、等技术栈! 

需要获取以下这些面试题答案以及学习资料得话麻烦关注+好评之后

直接点击此链接→【点我直接获取】  即可免费获取哦~~

ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÂ¥ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃèÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃèÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÿÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃéÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃæÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÂ¥ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÂ¥ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÂ¥ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃþÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃçÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃæÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃèÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÿÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃð


看完三件事❤️

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注作者公众号 『 java烂猪皮 』,不定期分享原创知识。
  • 关注后回复【666】扫码即可获取学习资料包。
  • 同时可以期待后续文章ing
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/902289
推荐阅读
相关标签