前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot注解

springboot注解

作者头像
叔牙
发布2020-11-19 15:16:14
5180
发布2020-11-19 15:16:14
举报
文章被收录于专栏:一个执拗的后端搬砖工

springboot注解

在这篇文章中,我们将探究Spring引导注解。我们将讨论基本的Springboot注解。

springboot注解

springboot附带了自动配置特性,这使得构建基于Spring的企业应用程序更加容易。让我们来介绍一些在springboot框架中可用的最重要的注解。

1

@SpringBootApplication

这是从springboot的最重要和最核心的注解之一。我们使用这个注解来标记我们的springboot应用程序的Main类。

@SpringBootApplication public class SpringOrderAnnotationApplication { public static void main(String[] args) { SpringApplication.run(SpringOrderAnnotationApplication.class, args); } }

@SpringBootApplication是一个方便的注解,它等价于使用@Configuration、@EnableAutoConfigurationand和@ComponentScan默认属性的组合注解。 你也可以单独使用@Configuration、@EnableAutoConfiguration和@ComponentScan,但是建议使用@SpringBootApplication注解。

2

@EnableAutoConfiguration

@EnableAutoConfiguration注解是springboot提供的智能配置系统。顾名思义,springboot系统尝试猜测和配置你可能需要的bean。自动配置类通常基于你的类路径和你定义的bean。 自动配置是智能的,当您定义更多自己的配置时,将自动返回。

@Configuration @EnableAutoConfiguration public class CarConfig {}

3

@Condition注解

springboot提供了创建自定义自动配置的选项。在编写这些自定义自动配置时,我们希望spring容器有条件地使用它们。为了解决这个问题,我们可能希望在我们的自动配置类中包含一个或多个“条件注解”。在这一节中,我们将讨论这些“条件注解”。

3.1:@ConditinalOnClass和@ConditionalOnMissing

这些注解也称为类条件。这些注释允许基于特定类的存在或 不存在的配置。让我们看看下面的例子来更清楚地理解这些条件。

@Configuration @ConditionalOnClass(DataSource.class) class DruidConfiguration { //... }

在上面的示例中,如果类路径中存在DataSource类,则该条件是匹配的,springboot将加载DruidConfiguration类中可用的配置。

@ConditinalOnMissingClass使用方式和@ConditionalOnClass类似,作用相反。

3.2:@ConditionalOnBean和@ConditionalOnMissingBean

这些注解也称为bean条件,并根据特定bean的存在或不存在来决定是否暴露bean。

@Configuration public class JdbcTemplateConfig { @Bean @ConditionalOnBean(DataSource.class) public JdbcTemplate jdbcTemplate() { // } }

在前面的示例中,如果DataSource类型的bean已经在ApplicationContext上下文中,则spring创建JdbcTemplate的 bean。@ConditionOnMissingBean的使用方式相似,但作用相反。

3.3:@ConditionalOnProperty

@ConditionalOnProperty注解允许基于Spring环境属性进行配置。使用前缀和名称属性指定用于检查的属性。让我们举一个例子来更详细地理解它。

@ConditionalOnProperty(prefix = "spring.rabbitmq", name = "dynamic") public AmqpAdmin amqpAdmin(CachingConnectionFactory connectionFactory) { return new RabbitAdmin(connectionFactory); }

在上述配置中,如果spring.rabbitmq.dynamic存在于环境中,就返回RabbitAdmin实例。

3.4:@ConditionalOnResource

只有当@ConditionalOnResource指定资源存在时,才允许配置。让我们创建一个例子来更清楚地理解它。

@ConditionalOnResource(resources = "classpath:mysql.properties") Properties databaseProperties() { // ... }

在上面的示例中,如果在类路径中提供mysql属性文件,则添加额外的数据库属性。

3.5:@ConditionalOnWebApplication和@ConditionalOnNotWebApplication

这两个注解允许根据应用程序是否是“web应用”来包括配置。举一个例子,我们想为web应用程序暴露服务,为了处理这个用例,我们可以使用@ConditionalOnWebApplication注解。

@ConditionalOnWebApplication Version applicationVersion() { // .. }

3.6:@ConditionalOnExpression

@ConditionalOnExpression注解允许基于SPEL表达式的结果进行配置。当将SPEL表达式求值为真时,spring将使用标记定义。

@Controller @ConditionalOnExpression("${controller.enabled}) public class WebController { // ... }

让我们来看另一个例子,在其中我们只包含某些开发模式的配置。

@Bean @ConditionalOnExpression("${devonly}") DataSource dataSource() { // ... }

3.7:@Conditional

springboot的大部分自动配置功能是基于@Conditional注解构建的。spring4.0引入了@Conditional注解。此注解表明,当所有指定条件匹配时,组件才有资格进行注册。我们可以使用这个注解来构建我们自己自定义的本篇中不可用的条件。

为了更好地理解,假设我们想创建一个服务,它基于国内或国际旅行向客户推荐保险。

public interface Insurance { RecommendedPolicy insurance(); } @Component @Conditional(DomesticInsuranceCondition.class) public class DomesticInsurance implements Insurance { public RecommendedPolicy insurance() { System.out.println("Domestic Insurance"); return DomesticInsurance; } } @Component @Conditional(InternationalInsuranceCondition.class) public class InternationalInsurance implements Insurance { public RecommendedPolicy insurance() { System.out.println("International Insurance"); return InternationalInsurance; } }

4

总结

在本文中,我们探究了springboot注解。我们了解了不同的注解以及如何使用这些注解来调整springboot自动配置过程。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PersistentCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档