SpringBoot注解自动扫描-底层实现
分析上文Spring Boot快速入门
@SpringBootApplication
public class HelloWorldApplication {
    public static void main(String[] args) {
        //Spring应用启动起来
        SpringApplication.run(HelloWorldApplication.class,args);
    }
}
@SpringBootConfiguration:Spring Boot的配置类,我们点击进去查看
 我们看到28行的注解
 @EnableAutoConfiguration:开启自动配置的功能
以前我们使用三大框架时,很多东西需要自己在xml中配置,但现在Spring Boot帮我们自动配置-》就是该注解实现的
 我们ctrl+右键点击该注解查看
 
 @Import({AutoConfigurationImportSelector.class})
 @Import:Spring的底层注解,向容器中导入一个组件
 @AutoConfigurationPackage:添加该注解的类所在的package 作为 自动配置package 进行管理
 点击@AutoConfigurationPackage注解进去查看源码
 
 点击21行的Registrar.class
 
在该处打上断点,在debug模式下进行源码追踪
 选中(String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0])-》右键-》Evaluate expression-》Evaluate
 我们发现将@SpringBootApplication标注的类的所在包及其下面所有的子包的所有组件扫描到了Spring容器中,所以我们必须将Controller、service、dao等放到主配置类所在包的子包中
@Import({AutoConfigurationImportSelector.class})
 AutoConfigurationImportSelector.:导入哪些组件的选择器,将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
 断点追踪
 

 有了上面的自动配置类,我们就不需要再手动编写;那么自动配置类是从哪里扫描到这些自动配置类呢
 
 SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader())
我们点击loadFactoryNames查看进一步查看源码实现方式
 
 springboot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就开始生效,帮我们进行配置工作
 打开我们导入的包
 
 
 查看web自动配置类点击查看源码
 
 
 我们能够看到我们在SpringMVC中配置的很多功能,比如视图解析器(如上图所示)
J2EE的整体解决方案和自动配置都在spring-boot-autoconfigure-2.3.6.RELEASE.jar中
 (比如我们熟悉的aop:事务,cache:缓存,dao:持久层 等等
 
 这就是约定大于配置
												
											SpringBoot注解自动扫描-底层实现的更多相关文章
- springboot注解大全
		springboot注解:@Service: 注解在类上,表示这是一个业务层bean@Controller:注解在类上,表示这是一个控制层bean@Repository: 注解在类上,表示这是一个数据 ... 
- 【转载】springboot注解
		https://blog.csdn.net/yitian_66/article/details/80866571 springboot注解:@Service: 注解在类上,表示这是一个业务层bean@ ... 
- springboot注解使用说明
		springboot注解 @RestController和@RequestMapping注解 我们的Example类上使用的第一个注解是 @RestController .这被称为一个构造型(ster ... 
- Spring-扫描注解原理,注解自动扫描原理分析
		注解自动扫描原理分析 在spring的配置文件中加入如下代码,spring便开启了自动扫描,那么它的底层到底是如何实现的呢? <context:component-scan base-packa ... 
- SpringBoot注解把配置文件自动映射到属性和实体类实战
		SpringBoot注解把配置文件自动映射到属性和实体类实战 简介:讲解使用@value注解配置文件自动映射到属性和实体类 1.配置文件加载 方式一 1.Controller上面配置 @Propert ... 
- SpringBoot集成MyBatis底层原理及简易实现
		MyBatis是可以说是目前最主流的Spring持久层框架了,本文主要探讨SpringBoot集成MyBatis的底层原理.完整代码可移步Github. 如何使用MyBatis 一般情况下,我们在Sp ... 
- SpringBoot注解综合
		SpringBoot注解综合 @Bean 注解通常会应用在一些配置类(由@Configuration注解描述)中,用于描述具备返回值的方法,然后系统底层会通过反射调用其方法,获取对象基于作用域将对象进 ... 
- springBoot系列-->springBoot注解大全
		一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ... 
- SpringBoot注解大全(转)
		原文链接:[springBoot系列]--springBoot注解大全 一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Co ... 
随机推荐
- C#处理医学影像(三):基于漫水边界自动选取病灶范围的实现思路
			开发背景: 医生在实际使用PACS软件观察病灶时,经常会测量不规则病灶的周长和面积,使用画笔工具勾勒比较耗时且准度欠佳, 或者在标记人工智能训练样本时少则几百张,多则几千张,为极大减少耗时和极大提高工 ... 
- ArcMap操作随记(3)
			1.地图四要素: 图名.图例.比例尺.指北针 2.[栅格计算器].[加权叠加]和[加权总和]的不同 [栅格计算器]的结果是浮点型小数 [加权叠加]工具,输入栅格必须为整型.若成本栅格涉及重分类,最好用 ... 
- org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests
			https://blog.csdn.net/qq_43349162/article/details/115285780 https://blog.csdn.net/Think_and_work/art ... 
- Oracle在存储过程中建表、建索引权限不足
			修改存储过程,在存储过程名称后面添加 Authid Current_User 后执行通过. CREATE OR REPLACE PROCEDURE p_test Authid Current_User ... 
- phpstudy、Apache安装DVWA教程
			1.下载DVWA(http://www.dvwa.co.uk/) 2.解压缩DVWA安装包到服务器的目录下 Apache: \Apache24\htdocs phpStudy: \PHPTutoria ... 
- @Controller 注解?
			该注解表明该类扮演控制器的角色,Spring 不需要你继承任何其他控制器基类或 引用 Servlet API. 
- C++分布式系统——《开题》
			在下自大二接触编程,大二.大三刻苦涉猎编程相关书籍,自那时起爱上了 C++,C++确实极有魅力,本想从此在C++领域深钻,但是扩展技术的广度在那个算是半只脚踏入编程且已经读完了 C++ 流行书籍的阶段 ... 
- Netty学习摘记 —— 初识编解码器
			本文参考 本篇文章是对<Netty In Action>一书第十章"编解码器框架"的学习摘记,主要内容为解码器和编码器 编解码器实际上是一种特殊的ChannelHand ... 
- (stm32f103学习总结)—ADC模数转换实验
			一.STM32F1 ADC介绍 TM32F103 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可 以使用双重(提高采样率).STM32F1 的 ADC 是 12 位逐次 逼近型的模拟数 ... 
- 专家PID
			前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法,基本已经覆盖了无模型和简单模型PID控制经典算法的大部.再接下来的我们将讨论智能PID控制,智能PID控制不同于常规意义下的智能控制,是 ... 
