Springboot核心注解笔记
2018-10-18 11:37
1046 查看
springboot启动类:
[code]//spring快速启动 @SpringBootApplication public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class); } }
启动类上有一个注解@SpringBootApplication,这个注解中主要的核心注解有以下几个:
[code]@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited //1.配置注解 @SpringBootConfiguration //2.自动配置注解 @EnableAutoConfiguration //3.注解扫描 @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication {
1.配置注解
@SpringBootApplication内部有@SpringBootConfiguration注解,而@SpringBootConfiguration注解中又依赖于@Configuration注解,configuration就是springbean的配置注解。因此在有SpringBootApplication或者SpringBootConfiguration注解的类中,可以使用注解的方式配置bean:
[code]@Bean public Object getObj(){ return null; }
2.自动配置注解EnableAutoConfiguration
[code]@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage //导入了一个自动配置导入选择器 @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {}; }
点入AutoConfigurationImportSelector中间有一段代码:
[code]//得到所有的类名 List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
[code]protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()); //这里看出,这个方法会去找META-INF/spring.factories下的文件 Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct."); return configurations; }
这里所能看见这些类名,后缀基本都是AutoConfiguration,自动配置类,这里可以随意找一个自动配置类看一看:
[code]package org.springframework.boot.autoconfigure.data.redis; import java.net.UnknownHostException; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; @Configuration @ConditionalOnClass({RedisOperations.class}) //这个注解加载了一个配置 @EnableConfigurationProperties({RedisProperties.class}) @Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class}) public class RedisAutoConfiguration { public RedisAutoConfiguration() { } @Bean @ConditionalOnMissingBean( name = {"redisTemplate"} ) public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate<Object, Object> template = new RedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } }
点进去继续看RedisOperations.class
[code]//加载配置文件 @ConfigurationProperties( //配置文件前缀 prefix = "spring.redis" ) public class RedisProperties {
所加载的配置在配置文件中搜索一下
[code]{ "sourceType": "org.springframework.boot.autoconfigure.data.redis.RedisProperties", "defaultValue": 6379, "name": "spring.redis.port", "description": "Redis server port.", "type": "java.lang.Integer" }
可以看到自动设置的一些配置。
这就是springboot自动配置加载的大致流程。如果这个流程大致了解之后,我们就可以修改springboot的一些自带的配置
[code]<resource> <filtering>true</filtering> <directory>${basedir}/src/main/resources</directory> <includes> <include>**/application*.yml</include> <include>**/application*.yaml</include> <include>**/application*.properties</include> </includes> </resource>
在springboot要加载的配置文件中加上要修改的键值对即可。
3.注解扫描ComponentScan
将会扫描SpringBootApplication启动类同级包下(包括子包)的所有注解。
以上大致就是springboot启动的三个比较核心的注解。
阅读更多
相关文章推荐
- Spring Boot 核心注解与配置文件
- Spring Boot学习笔记----mybatis注解(一)
- Spring Boot核心原理-自动配置 以及@ConfigurationProperties 注解
- SpringBoot笔记4---如何读写数据库之使用@Query注解来读写数据库
- SpringBoot缓存注解学习笔记之Redis
- Spring Boot核心条件注解
- Spring Boot学习笔记1:Spring, Spring Boot中的@Component 和@ComponentScan注解用法介绍
- Spring Boot 注解笔记
- Spring Boot 运行原理 - 核心注解
- Spring boot 学习笔记(05)——各种常用注解
- Spring Boot核心-核心注解、自动配置、自定义banner
- Spring Boot(二)核心注解
- springBoot 注解失败
- JavaEE框架——Springmvc入门(注解URL核心类详解、文件上传和下载)、和Spring的整合
- SpringBoot 中常用注解@Controller/@RestController/@RequestMapping介绍(转)
- 廖师兄springboot学习笔记二(增加IDEA单模块jsp和多模块jsp引入)
- 学习笔记之微服务构建Spring Boot基础知识
- SpringBoot笔记——入门案例
- spring-boot笔记-静态资源及页面开发(六)
- Redis系列三 - Spring boot如何使用redis做缓存及缓存注解的用法总结