@SpringBootApplication原理
来源:互联网 发布:mysql时间转日期函数 编辑:程序博客网 时间:2024/05/21 22:42
1.@SpringBootApplication是一个组合注解,我们来看一下它的源码:
//// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package org.springframework.boot.autoconfigure;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import org.springframework.boot.SpringBootConfiguration;import org.springframework.boot.context.TypeExcludeFilter;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.FilterType;import org.springframework.context.annotation.ComponentScan.Filter;import org.springframework.core.annotation.AliasFor;@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class})})public @interface SpringBootApplication { @AliasFor( annotation = EnableAutoConfiguration.class, attribute = "exclude" ) Class<?>[] exclude() default {}; @AliasFor( annotation = EnableAutoConfiguration.class, attribute = "excludeName" ) String[] excludeName() default {}; @AliasFor( annotation = ComponentScan.class, attribute = "basePackages" ) String[] scanBasePackages() default {}; @AliasFor( annotation = ComponentScan.class, attribute = "basePackageClasses" ) Class<?>[] scanBasePackageClasses() default {};}2.而@SpringBootApplication的核心功能是由@EnableAutoConfiguration提供的:
//// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package org.springframework.boot.autoconfigure;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import org.springframework.context.annotation.Import;@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import({EnableAutoConfigurationImportSelector.class})public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {};}3.在@EnableAutoConfiguration中个,关键的注解是@Import这个注解,它导入了“EnableAutoConfigurationImportSelector”这个类;
4.而“EnableAutoConfigurationImportSelector”这个类使用了“SpringFactoriesLoader。loadFactoryName”这个方法来扫描具有META-INF/spring,factories文件的jar包;
5.而在我们导入的“spring-boot-autoconfigure-1.3.0.x.jar”包中就有一个spring.factories文件,次文件中声明了有哪些自动配置
阅读全文
0 0
- @SpringBootApplication原理
- SpringBootApplication
- @SpringBootApplication
- @SpringBootApplication理解
- @SpringBootApplication注解
- @SpringBootApplication注解
- @SpringBootApplication and CommandLineRunner
- Spring注解之:@SpringBootApplication
- @SpringBootApplication的使用
- @SpringBootApplication扫描哪些包
- 使用@SpringBootApplication注解
- @SpringBootApplication的使用
- SpringBootApplication背后的秘密
- Springboot系列:@SpringBootApplication注解
- @SpringBootApplication的使用
- @SpringBootApplication的使用
- @SpringBootApplication的使用
- @SpringBootApplication的使用
- Tensorflow快速入门2--实现手写数字识别
- struts2 入门实例原理与流程 过程理解
- 算法概论 习题8.16
- 【SQL server】merge 关键字的使用
- 逻辑回归基本原理
- @SpringBootApplication原理
- 【HDU3466】Proud Merchants
- Shiro简介及认证授权过程
- Windows编程之旅(八)
- ros_qtc_plugin插件的使用视频教程
- Java基础0711
- Lua闭包与上值
- 启动STS编译器一直卡在“populate auto detected configs”
- scikit-learn linearRegression 1.1.10 逻辑回归