SpringBoot核心注解
2019-04-09 12:00
615 查看
@SpringBootApplication,该注解是一个组合注解,包含了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。下面我们来简单分析一下每一个注解分别是用来做什么的。
1.注解@SpringBootConfiguration
[code]@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }
这是一个复合注解,继承自@Configuration。二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
该注解类其实就相当于spring配置bean的xml文件。
2.注解@ComponentScan
[code]@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Repeatable(ComponentScans.class) public @interface ComponentScan { @AliasFor("basePackages") String[] value() default {}; @AliasFor("value") String[] basePackages() default {}; Class<?>[] basePackageClasses() default {}; Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class; Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class; ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT; String resourcePattern() default ClassPathScanningCandidateComponentProvider.DEFAULT_RESOURCE_PATTERN; boolean useDefaultFilters() default true; Filter[] includeFilters() default {}; Filter[] excludeFilters() default {}; boolean lazyInit() default false; @Retention(RetentionPolicy.RUNTIME) @Target({}) @interface Filter { FilterType type() default FilterType.ANNOTATION; @AliasFor("classes") Class<?>[] value() default {}; @AliasFor("value") Class<?>[] classes() default {}; String[] pattern() default {}; } }
自动搜索项目中所有的Spring组件,我们可以通过basepackage属性来制定扫描范围,如果没有指定,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。所以springboot的启动类最好放在root package下。
3.注解@EnableAutoConfiguration
[code]@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; /** * Exclude specific auto-configuration classes such that they will never be applied. * @return the classes to exclude */ Class<?>[] exclude() default {}; /** * Exclude specific auto-configuration class names such that they will never be * applied. * @return the class names to exclude * @since 1.3.0 */ String[] excludeName() default {}; }
开启自动配置,将所有符合条件的@configuration配置都加载到当前spring的IOC容器当中。(springboot框架是如何知道哪些复合条件呢?基于@ConditionalOnClass(HealthIndicator.class)、@ConditionalOnBean(DiscoveryClient.class)、@ConditionalOnProperty这些类做到的,后面再分析)
相关文章推荐
- Springboot核心注解笔记
- Spring Boot(二)核心注解
- Spring Boot 运行原理 - 核心注解
- Spring Boot核心原理-自动配置 以及@ConfigurationProperties 注解
- Spring Boot核心条件注解
- Spring Boot 最核心的 25 个注解,都是干货!
- Spring Boot核心-核心注解、自动配置、自定义banner
- Spring Boot 核心注解
- Spring Boot 核心注解与配置文件
- SpringBoot核心注解
- Spring Boot自定义注解和它的联动过滤验证效果
- Spring boot常用注解 总结
- Spring Boot分布式系统实践【基础模块构建3.3】注解轻松实现操作日志记录
- Spring Boot 2.0深度实践之核心技术篇(最新最全)
- spring boot 条件注解表达式
- SpringBoot中@EnableAutoConfiguration注解用法收集
- Spring Boot 集成 resteasy篇 — jax-rs常用注解介绍
- SpringBoot 环境中注解对象失效(曾经的坑)
- SpringBoot 常用注解的通俗解释
- Spring Boot常用注解汇总