Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。它已经成为地球上最热门的技术之一。
- Java EE开发的颠覆者 Spring Boot实战
- Spring Boot参考指南
- Spring Boot Reference Guide
bootstrap.yml可以理解成系统级别的一些参数配置,这些参数一般是不会变动的
application.yml 可以用来定义应用级别的,如果搭配spring-cloud-config使用 application.yml里面定义的文件可以实现动态替换
注解 | 版本 | 描述 |
@Resource | - | 规范 |
@PostConstruct | - | JavaEE5规范 |
@PreDestroy |
|
JavaEE5规范 |
@Autowired | 2.5 | 略 |
@Qualifier | 2.5 | 新改进特性:可以单独在方法中使用 |
@Required | 2.0 | 略 |
@Scope | 2.5 | 略 |
@Value | 3.0 | 略 |
@PropertySource | 3.1 | 加载属性文件,绑定值,必须使用properties文件 |
@PropertySources | 4.0 | PropertySource的集合形式 |
@Repository | 2.0 | 略 |
@Service | 2.5 | 略 |
@Component | 2.5 | 略 |
@Bean | 3.0 | 生产bean |
@DependsOn | 3.0 | 控制依赖bean加载顺序 |
@Lazy | 3.0 | Bean懒加载 |
@Import | 3.0 | 可导入Configuration、component classes、 ImportSelector、ImportResource |
@ImportResource | 3.0 | 导入XML配置文件 |
@Primary | 3.0 | 在自动装配时这个bean应该优先当多个候选人资格(相同类型的bean) |
@ComponentScan | 3.1 | 扫描包,可定义@Filter |
@Filter | 3.1 | 扫描包过滤配置 |
@Configuration | 3.0 | 表明这个是可以声明一个或多个@Bean的配置类 |
@ActiveProfiles | 3.1 | >单元测试中指定环境变量 |
@Profile | 3.1 | 多环节 |
@SpringBootApplication | 1.2.0 | 表明这是一个spring-boot启动类,等价于@Configuration,@ComponentScan,@EnableAutoConfiguration |
@SpringBootConfiguration | 1.4.0 | 表明这个类提供了spring-boot启动应用程序 |
@EnableAutoConfiguration | 1.3.0 | 启用自动配置Spring应用程序上下文,它自动根据您的类路径来获取spi(spring.factories)中这些的bean的定义。 |
@ConfigurationProperties | 1.3.0 | 绑定属性值,适用于类或方法(第三方组件),支持javax.validation注解校验 |
@EnableConfigurationProperties | 1.3.0 | 开启对@ConfigurationProperties注解配置Bean的支持 |
@ConfigurationPropertiesBinding | 1.3.0 | ConfigurationProperties绑定属性时属性转换 |
@AutoConfigureAfter | 1.3.0 | auto-configuration |
@AutoConfigureBefore | 1.3.0 | auto-configuration |
@AutoconfigureOrder | 1.3.0 | auto-configuration |
@Conditional | 4.0 | 该类下面的所有@Bean都会启用配置 |
@ConditionalOnClass | 1.3.0 | 某个class位于类路径上,才会实例化一个Bean |
@ConditionalOnMissingClass | 1.3.0 | 某个class类路径上不存在的时候,才会实例化一个Bean |
@ConditionalOnBean | 1.3.0 | Bean条件 |
@ConditionalOnMissingBean | 1.3.0 | 反之 |
@ConditionalOnProperty | 1.1.0 | Property条件 |
@ConditionalOnResource | 1.3.0 | Resource条件 |
@ConditionalOnWebApplication | 1.3.0 | WebApplication条件 |
@ConditionalOnNotWebApplication | 1.3.0 | 反之 |
@ConditionalOnExpression | 1.3.0 | SpEL表达式条件 |
@ConditionalOnJndi | 1.2.0 | 基于JNDI的可用性相匹 |
@ConditionalOnJava | 1.1.0 | 指定JVM版本 |
@ConditionalOnCloudPlatform | 1.5.0 | 指定的云平台 |
@EnableAsync | 3.1 | 异步任务的启用 |
@Async | 3.0 | 异步任务方法或者异步类 |
@EnableScheduling | 3.1 | 计划任务的启用 |
@Scheduled | 3.0 | 声明这是一个计划任务,方法返回类型为void,支持cron、fixDelay、fixRate |
@EnableWebSocketMessagetBroker | 4.0 | webSocket启用 |
@MessageMapping | 4.0 | websocket |
@EnableAspectJAutoProxy | 3.1 | AOP启用 |
@Aspect | - | aspectj |
@PointCut | - | aspectj |
@Before | - | aspectj |
@After | - | aspectj |
@Around | - | aspectj |
@AfterReturning | - | aspectj |
@AfterThrowing | - | aspectj |
@EnableCaching | 3.1 | 缓存启用 |
@Cacheable | 3.1 | 对其结果进行缓存 |
@Caching | 3.1 | 组合多个Cache注解使用 |
@CacheEvict | 3.1 | 根据一定的条件对缓存进行清空 |
@CachePut | 3.1 | 和 @Cacheable 不同的是,它每次执行前不会去检查缓存,都会触发真实方法的调用 |
@CacheConfig | 4.1 | 类级别的注解,对词重复(方法多次指定cacheNames的)定义的改进 |
@Controller | 2.5 | 略 |
@RequestMapping | 2.5 | 略 |
@ControllerAdvice | 3.2 | 方法将应用于所有控制器,可以结合@ExceptionHandler、@InitBinder、@ModelAttribute使用 |
@RestControllerAdvice | 4.3 | 为ControllerAdvice和ResponseBody的组合体 |
@CookieValue | 3.0 | 略 |
@SessionAttributes | 2.5 | 略 |
@SessionAttribute | 4.3 | 将方法参数绑定到一个会话属性 |
@CrossOrigin | 4.2 | ajax跨域 |
@ExceptionHandler | 3.0 | 处理异常的具体处理程序类和/或处理程序方法 |
@ResponseStatus | 3.1 | 标志着一个方法或异常类状态应该返回 |
@MatrixVariable | 3.2 | 矩阵变量绑定参数(Map型参数)如:/path;name=value;name2=value2 |
@InitBinder | 2.5 | WebDataBinder用来自动绑定前台参数到mdel中 |
@ModelAttribute | 2.5 | 略 |
@RequestMapping | 2.5 | 略 |
@RequestAttribute | 4.3 | 将方法参数绑定到请求属性 |
@RequestParam | 2.5 | 略 |
@PathVariable | 3.0 | 略 |
@RequestBody | 3.0 | 略 |
@ResponseBody | 3.0 | 略 |
@RequestHeader | 3.0 | 略 |
@RequestPart | 3.1 | 绑定“multipart/form-data”参数 |
@WebAppConfiguration | 3.2 | @WebAppConfiguration |
@EnableWebMvc | 3.1 | 开启Web Mvc支持 |
@RestController | 4.0 | 为@Controller和@ResponseBody组合体 |
@ServletComponentScan | 1.3.0 | 注入@WebServlet,@WebFilter,@WebListener的类 |
@GetMapping | 4.3 | 组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写 |
@PostMapping | 4.3 | 同上 |
@PutMapping | 4.3 | 同上 |
@DeleteMapping | 4.3 | 同上 |
@PatchMapping | 4.3 | 同上 |
@JsonComponent | 1.4.0 | 自定义JSON序列化器和反序列化器 |
@EnableTransactionManagement | 3.1 | 事务启用 |
@Transactional | 1.2 | 略 |
@NoRepositoryBean | ? | JPA |
@EnableJpaRepositories | ? | JPA |
@EntityScan | 1.4.0 | JPA |
@Entity | ? | JPA |
@Embeddable | ? | JPA |
@MappedSuperclass | ? | JPA |
@NodeEntity | ? | Neo4j |
@EnableNeo4jRepositories | ? | Neo4j |
@SolrDocument | ? | Solr |
@Document | ? | Elasticsearch |
@ManagementContextConfiguration | 1.3.0 | Actuator模块 |
@ExportMetricWriter | 1.3.0 | Actuator模块 |
@ExportMetricReader | 1.3.0 | Actuator模块 |
@EnableMBeanExport | 3.2 | JMX Mbean启用 |
@ManagedResource | 1.2 | 将类的所有实例标识为JMX受控资源 |
@ManagedOperation | 1.2 | 将方法标识为JMX操作 |
@ManagedAttribute | 1.2 | 将getter或者setter标识为部分JMX属性 |
@ManagedOperationParameter | 1.2 | 定义操作参数说明 |
@ManagedOperationParameters | 1.2 | 定义操作参数说明 |
@EnableSpringSecurity | ? | 开启spring seccurity支持 |
@EnableGlobalMethodSecurity | ? | 启用'basic'认证 |
@EnableAuthorizationServer | ? | oauth2 access tokens |
@EnableOAuth2Client | ? | 安全 |
@EnableOAuth2Sso | ? | 安全 |
@EnableIntegration | ? | 启用spring-boot-starter-integration基于消息和其他传输协议的抽象,比如HTTP,TCP等 |
@EnableJms | ? | 开启JMS支持 |
@JmsListener | ? | 创建一个监听者端点,默认是支持事务性的 |
@EnableRabbit | ? | 开启Rabbit支持(AMQP) |
@RabbitListener | ? | 创建一个监听者端点 |
@ContextConfiguration | 2.5 |
集成化测试中定义加载及配置ApplicationContext。 Spring 3.1之前,只有基于路径的资源位置(通常是XML配置文件)的支持,Spring 4.0.4 |
@SpringBootTest | 1.4.0 |
Test模块,并添加 @RunWith(SpringRunner.class) |
@TestConfiguration | 1.4.0 | 类似@Configuration |
@TestComponent | 1.4.0 | 类似@Component |
@LocalServerPort | 1.4.0 | 用于注入测试用例实际使用的端口 |
@MockBean | 1.4.0 | 需Mock的bean |
@SpyBean | 1.4.0 | 获得代理对象相当于Mockito.spy(MethodTest.class) |
@JsonTest | 1.4.0 | 测试对象JSON序列化和反序列化是否工作正常 |
@AutoConfigureJsonTesters | 1.4.0 | 启用和配置的JSON的自动测试 |
@WebMvcTest | 1.4.0 | 检测单个Controller是否工作正常 |
@AutoConfigureMockMvc | 1.4.0 | 注解一个non-@WebMvcTest的类 |
@DataJpaTest | 1.4.0 | JPA测试 |
@AutoConfigureTestEntityManager | 1.4.0 | JPA |
@AutoConfigureTestDatabase | 1.4.0 | 真实DB/嵌入DB |
@RestClientTest | 1.4.0 | 针对rest客户端测试 |
@AutoConfigureRestDocs | 1.4.0 | 开启了restdocs生成snippets文件,并指定了存放位置 |
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中属性 | 一个个指定 |
松散绑定 | Yes | No |
SpEL表达式 | No | Yes |
JSR303数据校验 | Yes | No |
复杂类型封装 | Yes | No |
Configuration Metadata 配置项友好提示 |
Yes | NO |
属性 | 说明 |
person.firstName | 标准驼峰规则 |
person.first-name | 虚线表示,推荐用于.properties和.yml文件中 |
person.first_name | 下划线表示,用于.properties和.yml文件的可选格式 |
PERSON_FIRST_NAME | 大写形式,使用系统环境变量时推荐 |
@Configuration替代xml来定义BeanDefinition的一种手段。Auto-configuration也是定义BeanDefinition的一种手段,也就是spring spi(META-INF/spring.factories)读取出来的key为org.springframework.boot.autoconfigure.EnableAutoConfiguration的配置类,简称为EnableAutoConfiguration加载。
这两者的相同之处有:
1.都是使用@Configuration注解的类,这些类里都可以定义@Bean、@Import、@ImportResource。
2.都可以使用@Condition来根据情况选择是否加载
而不同之处有:
1.加载方式不同:普通@Configuration则是通过扫描package path加载的,Auto-configuration的是通过读取classpath:META-INF/spring.factories中EnableAutoConfiguration
2.加载顺序不同,普通@Configuration的加载永远在Auto-configuration之前
3.内部加载顺序可控上的不同:普通@Configuration则无法控制加载顺序,Auto-configuration可以使用@AutoConfigureOrder、@AutoConfigureBefore、@AutoConfigureAfter
首先如果你对spring3.x或2.x系列源码不太熟悉,spring boot的源码可能对你而言非常难,不过你也大可不必为此而烦恼,本来度源码讲究的就是领悟力,不一定要全部掌握的。
AbstractApplicationContext
AnnotationConfigApplicationContext
AnnotatedBeanDefinitionReader
ClassPathBeanDefinitionScanner
EventPublishingRunListener
SimpleApplicationEventMulticaster
ApplicationStartedEvent / ApplicationEnvironmentPreparedEvent / ApplicationFailedEvent
JarLaucher(spring boot的从这向下关注)
Archive
SpringApplication
SpringFactoriesLoader
ApplicationContextInitializer
ConfigurationClassPostProcessor
AnnotationConfigServletWebServerApplicationContext
.....
配置属性系列查看
- 8.1 server
- 8.1.1 server
- 8.1.2 cookie / session
- 8.1.3 tomcat
- 8.1.4 undertow
- 8.1.3 ssl
- 8.2 MVC
- 8.2.1 MVC
- 8.2.2 http
- 8.2.3 view
- 8.2.4 multipart
- 8.2.5 json
- 8.2.6 resource
- 8.2.7 messages
- 8.2.8 freemarker
- 8.2.9 velocity
- 8.2.10 thymeleaf
- 8.2.11 mustcache
- 8.2.12 jersey
- 8.2.13 mobile
- 8.2.14 groovy
- 8.3 datasource
- 8.3.1 datasource
- 8.3.2 JPA
- 8.3.3 jooq
- 8.3.4 h2
- 8.3.4 JTA
- 8.4 cache
- 8.5 redis
- 8.6 mongodb
- 8.7 springdata
- 8.8 mq
- 8.8.1 rabbitmq
- 8.8.2 activemq
- 8.8.3 jms
- 8.9 spring security
- 8.10 其他
- 8.10.1 aop
- 8.10.2 application
- 8.10.3 autoconfig
- 8.10.4 batch
- 8.10.5 jmx
- 8.10.6 mail
- 8.10.7 sendgrid
- 8.10.8 social