springboot注解详解(三)容器配置注解与Spring Boot注解

「这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

一、容器配置注解

1、@Autowired

 @Autowired注解用于标记Spring将要解析和注入的依赖项。此注解可以作用在构造函数、字段和setter方法上。

2、@Primary

 当系统中需要配置多个具有相同类型的bean时,@Primary可以定义这些Bean的优先级。

3、@PostConstruct与@PreDestroy

 值得注意的是,这两个注解不属于Spring,它们是源于JSR-250中的两个注解,位于common-annotations.jar中。@PostConstruct注解用于标注在Bean被Spring初始化之前需要执行的方法。@PreDestroy注解用于标注Bean被销毁前需要执行的方法。

4、@Qualifier

 当系统中存在同一类型的多个Bean时,@Autowired在进行依赖注入的时候就不知道该选择哪一个实现类进行注入。此时,我们可以使用@Qualifier注解来微调,帮助@Autowired选择正确的依赖项。下面是一个关于此注解的代码示例:

二、Spring Boot注解

1、@SpringBootApplication

 @SpringBootApplication注解是一个快捷的配置注解,在被它标注的类中,可以定义一个或多个Bean,并自动触发自动配置Bean和自动扫描组件。此注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合。在Spring Boot应用程序的主类中,就使用了此注解。示例代码如下:

@SpringBootApplication

public class Application{

 public static void main(String [] args){

 SpringApplication.run(Application.class,args);

 }

}
复制代码

2、@EnableAutoConfiguration

 @EnableAutoConfiguration注解用于通知Spring,根据当前类路径下引入的依赖包,自动配置与这些依赖包相关的配置项。

3、@ConditionalOnClass与@ConditionalOnMissingClass

 这两个注解属于类条件注解,它们根据是否存在某个类作为判断依据来决定是否要执行某些配置。下面是一个简单的示例代码:

@Configuration

@ConditionalOnClass(DataSource.class)

class MySQLAutoConfiguration {

 //...

}
复制代码

4、@ConditionalOnBean与@ConditionalOnMissingBean

 这两个注解属于对象条件注解,根据是否存在某个对象作为依据来决定是否要执行某些配置方法。示例代码如下:

@Bean

@ConditionalOnBean(name="dataSource")

LocalContainerEntityManagerFactoryBean entityManagerFactory(){

 //...

}

@Bean

@ConditionalOnMissingBean

public MyBean myBean(){

 //...

}
复制代码

5、@ConditionalOnProperty

 @ConditionalOnProperty注解会根据Spring配置文件中的配置项是否满足配置要求,从而决定是否要执行被其标注的方法。示例代码如下:

@Bean

@ConditionalOnProperty(name="alipay",havingValue="on")

Alipay alipay(){

 return new Alipay();

}
复制代码

6、@ConditionalOnResource

 此注解用于检测当某个配置文件存在使,则触发被其标注的方法,下面是使用此注解的代码示例:

@ConditionalOnResource(resources = "classpath:website.properties")

Properties addWebsiteProperties(){

 //...

}
复制代码

7、@ConditionalOnWebApplication与@ConditionalOnNotWebApplication

 这两个注解用于判断当前的应用程序是否是Web应用程序。如果当前应用是Web应用程序,则使用Spring WebApplicationContext,并定义其会话的生命周期。下面是一个简单的示例:

@ConditionalOnWebApplication

HealthCheckController healthCheckController(){

 //...

}
复制代码

8、@ConditionalExpression

 此注解可以让我们控制更细粒度的基于表达式的配置条件限制。当表达式满足某个条件或者表达式为真的时候,将会执行被此注解标注的方法。

@Bean

@ConditionalException("${localstore} && ${local == 'true'}")

LocalFileStore store(){

 //...

}
复制代码

9、@Conditional

 @Conditional注解可以控制更为复杂的配置条件。在Spring内置的条件控制注解不满足应用需求的时候,可以使用此注解定义自定义的控制条件,以达到自定义的要求。下面是使用该注解的简单示例:

@Conditioanl(CustomConditioanl.class)

CustomProperties addCustomProperties(){

 //...

}
复制代码

总结

 本次总结了Spring Boot中常见的各类型注解的使用方式,让大家能够统一的对Spring Boot常用注解有一个全面的了解。由于篇幅的原因,关于Spring Boot不常用的一些注解,将在下一次分享中进行补充和说明。

猜你喜欢

转载自juejin.im/post/7033173009858986015