《SpringBoot》—— @SpringBootApplication注解
2020-01-14 04:49
561 查看
主程序类,主入口类
@SpringBootApplication:Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;它是一个组合注解,以下是它所有包含的注解;源码解析👇
@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 {
其中最重要的三个注解分别是:
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan
下面分别剖析一下这三个注解的功效👇
1、@SpringBootConfiguration
@SpringBootConfiguration
:Spring Boot的配置类; 标注在某个类上,表示这是一个Spring Boot的配置类 ;
点进去看他的代码是这样的:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration {
说明
@SpringBootConfiguration也是来源于
@Configuration,二者功能都是将当前类标注为配置类,并将当前类里以
@Bean注解标记的方法的实例注入到srping容器中,实例名即为方法名。
至于
@Configuration,我想在非SpringBoot时代大家应该不陌生吧,作用是配置Spring容器,也即 JavaConfig 形式的 Spring IoC 容器的配置类所使用。
2、@EnableAutoConfiguration
@EnableAutoConfiguration
:开启自动配置功能;以前我们需要配置的东西,现在SpringBoot帮我们自动配置;
@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样才生效;
再点进去看他的代码:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration {
说明是借助
@AutoConfigurationPackage自动配置包的帮助;而
@AutoConfigurationPackage他是由
@Import(AutoConfigurationPackages.Registrar.class)来完成功能;
@Import是Spring的底层注解,给容器中导入一个组件;
@AutoConfigurationPackage是将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;
@Import(EnableAutoConfigurationImportSelector.class)中的 EnableAutoConfigurationImportSelector.class是导入哪些组件的选择器;将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
有了自动配置类,免去了我们手动编写配置注入功能组件的工作;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, classLoader);
SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作; 以前我们需要自己配置的东西,自动配置类都帮我们做好了;
3、@ComponentScan
@ComponentScan:会自动扫描指定包下全部标有
@Component的类,并注册成bean,当然包括@Component下的子注解:@Service,@Repository,@Controller;默认会扫描当前包和所有子包。将这些类自动加载到 Spring 容器中。
@ComponentScan
筛选功能:在扫描类的时候,通过对属性 includeFilters 和 excludeFilters 的设置,可以有对于类型有一个筛选功能。includeFilters 指定了哪些类才能被扫描到,excludeFilters 则相反,指定了哪些类得排除扫描。
@Configuration @ComponentScan(value="com.learn",excludeFilters={@Filter(type=FilterType.ANNOTATION,value=Service.class)}) public class Config { }
上述代码:
标注有
@Service注解的类,会被排除,不会被加载到 Spring 容器中。includeFilters 也有同样的功能,不再举例。
J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.10.RELEASE.jar
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- springboot入门---入口类注解@SpringBootApplication解析
- SpringBoot的注解:@SpringBootApplication注解 vs @EnableAutoConfiguration+@ComponentScan+@Configuration
- springboot学习之启动类中的@SpringBootApplication注解
- SpringBoot启动注解-@SpringBootApplication
- Springboot系列:@SpringBootApplication注解
- Springboot系列:@SpringBootApplication注解
- @SpringBootApplication注解
- @SpringBootApplication注解
- SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)
- @SpringBootApplication注解浅析
- SpringBoot入门:SpringBoot注解的使用Controller注解的使用方法
- Spring Boot(2):SpringBootApplication注解
- springboot访问方法时出错:Spring Boot Application: No converter found for return value of type
- 第三章 springboot -- 第一节 SpringBoot启动注解 ( @SpringBootApplication )
- @EnableAutoConfiguration和@SpringbootApplication注解
- spring boot中@SpringBootApplication注解
- SpringBoot修改缓存为redis与SpringBoot缓存注解用法详解
- SpringBootApplication注解 专题
- 32. Spring Boot使用@SpringBootApplication注解【从零开始学Spring Boot】
- 32. Spring Boot使用@SpringBootApplication注解【从零开始学Spring Boot】