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注解自动扫描-底层实现相关推荐
- spring-boot注解详解(一)
spring-boot注解详解(一) @SpringBootApplication @SpringBootApplication = (默认属性)@Configuration + @EnableAut ...
- SpringBoot注解把配置文件自动映射到属性和实体类实战
SpringBoot注解把配置文件自动映射到属性和实体类实战 简介:讲解使用@value注解配置文件自动映射到属性和实体类 1.配置文件加载 方式一 1.Controller上面配置 @Propert ...
- 十、springboot注解式AOP(@Aspect)统一日志管理
springboot注解式AOP(@Aspect)统一日志管理 简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功 ...
- SpringBoot注解大全(转)
原文链接:[springBoot系列]--springBoot注解大全 一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@C ...
- spring-boot注解详解(三)
1.SpringBoot/spring @SpringBootApplication: 包含@Configuration.@EnableAutoConfiguration.@ComponentScan ...
- @configuration注解_超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰
一.注解(annotations)列表 1.@SpringBootApplication 包含了@ComponentScan.@Configuration和@EnableAutoConfigurati ...
- 【SpringBoot 】SpringBoot注解详解
[SpringBoot ]SpringBoot注解详解 一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configura ...
- 【java】JDK中注解的底层实现
1.概述 转载:JDK中注解的底层实现 前提 用Java快三年了,注解算是一个常用的类型,特别是在一些框架里面会大量使用注解做组件标识.配置或者策略.但是一直没有深入去探究JDK中的注解到底是什么,底 ...
- SpringBoot : 注解@Resource
1.美图 2.概述 在项目开发中,@Autowired和@Resource之争,一直搞不清楚,反正也不想搞清楚到底什么时候用@Autowired,什么场景下用@Resource,就一直用@Autowi ...
最新文章
- 机器学习新算法更好描述量子系统模型
- 两段用来启动/重启Linux下Tomcat的Perl脚本
- Android杂谈--layout的横竖屏处理
- STM32硬件错误HardFault_Handler的处理方法
- mybatis教程--实现增删改查的入门教程
- c# 通过字体对话框获取字体名称和字体大小_PS插件神器 :fonTags,超好用的PS字体管理插件(附安装方法)
- ELK+logback搭建日志系统
- C#学习笔记:预处理指令
- VUE3 项目自定义修改网页标题和图标
- 分糖果(信息学奥赛一本通-T1380)
- swift 2.1 安裝與下載
- “华为鸿蒙”操作系统下月发布?华为辟谣:请以官方声明为准
- Mysql查询去空格方法汇总
- 人工智能降噪插件Topaz DeNoise AI
- Armstrong 一个n位数等于各个位数n次方之和
- 多智能体强化学习- COMA
- 浙大计算机科学基础实验,想加实验室的看过来-浙大计算机实验室详细推介
- R语言数学建模(2):how to build a graph
- 2021年【大学生Python学习】社区小博主【孤寒者】的年度总结
- 创基MIFI扩展坞自带4G上网功能扩展坞
热门文章
- ASP.NET MVC 2 验证
- nchar,char,varchar与nvarchar区别
- 个人密码安全策略 [转载]
- 快评《19家网站内容低俗被曝光》
- 63个优秀测试网站地址【个人总结】
- 工业机器人电路图讲解话术_6张经典电路图分析助你进阶高级电工,你都会了吗?...
- python 对excel文件进行分词并进行词频统计_python 词频分析
- mysql 复杂sql 面试_PHP面试之复杂MySQL语句的编写
- linux raid卷,linux – Areca RAID卷和LVM对齐
- java代码调用python_java 直接调用python脚本,并传递参数代码实例|chu