Spring Boot注解

前端之家收集整理的这篇文章主要介绍了Spring Boot注解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


Spring Boot注解

简介

Spring Boot通过自动配置让我们更加简单的使用Spring。在本文中我们将会介绍org.springframework.boot.autoconfigure 和org.springframework.boot.autoconfigure.condition 里面经常会用到的一些注解。

@SpringBootApplication

首先我们看一下@SpringBootApplication:

  1. @SpringBootApplication
  2. public class AnotationApp {
  3. public static void main(String[] args) {
  4. SpringApplication.run(AnotationApp.class, args);
  5. }
  6. }

@SpringBootApplication被用在Spring Boot应用程序的Main class中,表示整个应用程序是Spring Boot。

@SpringBootApplication实际上是@Configuration,@EnableAutoConfiguration 和 @ComponentScan 的集合。

@EnableAutoConfiguration

@EnableAutoConfiguration 意味着开启了自动配置。这意味着Spring Boot会去在classpath中查找自动配置的beans,并且自动应用他们。

注意, @EnableAutoConfiguration需要和@Configuration配合使用。

  1. @Configuration
  2. @EnableAutoConfiguration
  3. public class VehicleFactoryConfig {
  4. }

条件自动配置

有时候,我们在自定义自动配置的时候,希望根据某些条件来开启自动配置,Spring Boot 提供了一些有用的注解。

这些注解可以和@Configuration 类 或者 @Bean 方法一起使用。

@ConditionalOnClass 和 @ConditionalOnMissingClass

这两个注解的意思是,如果注解参数中的类存在或者不存在则Spring会去实例化自动配置的bean。

  1. @Configuration
  2. @ConditionalOnClass(DataSource.class)
  3. public class MysqLAutoconfiguration {
  4. }

@ConditionalOnBean 和 @ConditionalOnMissingBean

这两个和上面的区别在于,这两个是判断是否有实例化的bean存在。

  1. @Bean
  2. @ConditionalOnBean(name = "dataSource")
  3. LocalContainerEntityManagerfactorybean entityManagerFactory() {
  4. // ...
  5. }

@ConditionalOnProperty

使用这个注解我们可以判断Property的某些属性是不是需要的值:

  1. @Bean
  2. @ConditionalOnProperty(
  3. name = "useMysqL",
  4. havingValue = "local"
  5. )
  6. DataSource dataSource() {
  7. // ...
  8. }

@ConditionalOnResource

只有当某些resource存在的时候,才会起作用。

  1. @ConditionalOnResource(resources = "classpath:MysqL.properties")
  2. Properties additionalProperties() {
  3. // ...
  4. }

@ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication

这两个注解通过判断是否web应用程序。

  1. @Bean
  2. @ConditionalOnWebApplication
  3. HealthCheckController healthCheckController() {
  4. // ...
  5. return null;
  6. }

@ConditionalExpression

这个注解可以使用SpEL构造更加复杂的表达式:

  1. @Bean
  2. @ConditionalOnExpression("${useMysqL} && ${MysqLserver == 'local'}")
  3. DataSource dataSource() {
  4. // ...
  5. }

@Conditional

还有一种更加复杂的应用叫@Conditional,它的参数是一个自定义的condition类。

  1. @Bean
  2. @Conditional(HibernateCondition.class)
  3. Properties newAdditionalProperties() {
  4. //...
  5. return null;
  6. }
  1. public class HibernateCondition implements Condition {
  2. @Override
  3. public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
  4. return false;
  5. }
  6. }

这个类需要实现matches方法

本文的例子可以参考:https://github.com/ddean2009/learn-springboot2/tree/master/spring-boot-annotations

更多教程请参考 flydean的博客

猜你在找的Scala相关文章