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

「这是我参与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应用程序的主类中,就使用了此注解。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
typescript复制代码@SpringBootApplication

public class Application{

 public static void main(String [] args){

 SpringApplication.run(Application.class,args);

 }

}

2、@EnableAutoConfiguration

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

3、@ConditionalOnClass与@ConditionalOnMissingClass

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

1
2
3
4
5
6
7
8
9
less复制代码@Configuration

@ConditionalOnClass(DataSource.class)

class MySQLAutoConfiguration {

 //...

}

4、@ConditionalOnBean与@ConditionalOnMissingBean

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
less复制代码@Bean

@ConditionalOnBean(name="dataSource")

LocalContainerEntityManagerFactoryBean entityManagerFactory(){

 //...

}

@Bean

@ConditionalOnMissingBean

public MyBean myBean(){

 //...

}

5、@ConditionalOnProperty

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

1
2
3
4
5
6
7
8
9
less复制代码@Bean

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

Alipay alipay(){

 return new Alipay();

}

6、@ConditionalOnResource

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

1
2
3
4
5
6
7
less复制代码@ConditionalOnResource(resources = "classpath:website.properties")

Properties addWebsiteProperties(){

 //...

}

7、@ConditionalOnWebApplication与@ConditionalOnNotWebApplication

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

1
2
3
4
5
6
7
less复制代码@ConditionalOnWebApplication

HealthCheckController healthCheckController(){

 //...

}

8、@ConditionalExpression

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

1
2
3
4
5
6
7
8
9
less复制代码@Bean

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

LocalFileStore store(){

 //...

}

9、@Conditional

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

1
2
3
4
5
6
7
csharp复制代码@Conditioanl(CustomConditioanl.class)

CustomProperties addCustomProperties(){

 //...

}

总结

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

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%