当前位置: 首页 > wzjs >正文

哪里有学做视频的网站3中国商业网点建设开发中心官方网站

哪里有学做视频的网站3,中国商业网点建设开发中心官方网站,为什么说能进中交不进中建,网站推广优化外包便宜1、简述 在 Spring Boot 中,Conditional 注解用于实现 条件化 Bean 装配,即根据特定的条件来决定是否加载某个 Bean。它是 Spring 框架中的一个扩展机制,常用于实现模块化、可配置的组件加载。 本文将详细介绍 Conditional 相关的注解&…

1、简述

在 Spring Boot 中,@Conditional 注解用于实现 条件化 Bean 装配,即根据特定的条件来决定是否加载某个 Bean。它是 Spring 框架中的一个扩展机制,常用于实现模块化、可配置的组件加载。

本文将详细介绍 @Conditional 相关的注解,包括 @ConditionalOnClass@ConditionalOnMissingBean@ConditionalOnProperty 等,并结合实际应用示例讲解其使用方式。

在这里插入图片描述


2、@Conditional 注解概述

@Conditional 是 Spring 4 引入的条件装配注解,它可以根据外部环境或配置的状态,决定是否创建 Bean。

其核心接口是:

public interface Condition {boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
}

任何实现 Condition 接口的类,都可以用于自定义条件判断

@Configuration
public class MyConfig {@Bean@Conditional(MyCondition.class) public MyService myService() {return new MyService();}
}

其中 MyCondition.class 需要实现 Condition 接口,并提供判断逻辑。


3、Spring Boot 内置 @Conditional 相关注解

Spring Boot 提供了一些常见的 @Conditional 注解,简化了条件判断的逻辑:

注解作用
@ConditionalOnClass类路径下存在某个类时,才加载该 Bean
@ConditionalOnMissingClass类路径下不存在某个类时,才加载该 Bean
@ConditionalOnBean当容器中存在指定 Bean 时,才加载当前 Bean
@ConditionalOnMissingBean当容器中不存在指定 Bean 时,才加载当前 Bean
@ConditionalOnProperty当指定的配置属性满足条件时,才加载当前 Bean
@ConditionalOnExpression当指定的 SpEL 表达式为 true 时,才加载当前 Bean
@ConditionalOnJava当 Java 版本符合要求时,才加载当前 Bean
@ConditionalOnWebApplication当应用是 Web 应用时,才加载当前 Bean
@ConditionalOnNotWebApplication当应用不是 Web 应用时,才加载当前 Bean

3.1 @ConditionalOnClass 使用示例(类路径检测)

我们希望在 Spring Boot 项目中,当类路径下存在 com.example.MyLibrary 这个类时,才注册 MyService 这个 Bean。

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyAutoConfiguration {@Bean@ConditionalOnClass(name = "com.example.MyLibrary")public MyService myService() {return new MyService();}
}

解释:

  • 如果 com.example.MyLibrary 存在,则 MyService 会被创建。
  • 如果 com.example.MyLibrary 不存在,则 MyService 不会被加载

3.2 @ConditionalOnMissingBean(Bean 缺失时加载)

如果用户没有手动定义 MyService,则提供一个默认实现。

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic MyService myService() {return new MyService("Default Implementation");}
}

解释:

  • 如果 Spring 容器中已经存在 MyService,则不会创建新的 Bean。
  • 只有当 MyService 不存在时,才会注册默认实现。

3.3 @ConditionalOnProperty(基于配置项条件加载 Bean)

我们希望 MyService 只有在 app.feature.enabled=true 时才被创建。

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyAutoConfiguration {@Bean@ConditionalOnProperty(name = "app.feature.enabled", havingValue = "true", matchIfMissing = false)public MyService myService() {return new MyService();}
}

解释:

  • 如果 application.properties 中包含 app.feature.enabled=true,则 MyService 会被创建。
  • 如果 app.feature.enabled=false,或者该属性未定义,则 MyService 不会被加载

application.properties 中启用:

app.feature.enabled=true

3.4 @ConditionalOnBean(存在特定 Bean 时才加载)

UserService 存在时,才创建 OrderService

import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class OrderServiceConfiguration {@Bean@ConditionalOnBean(UserService.class)public OrderService orderService() {return new OrderService();}
}

解释:

  • 如果 UserService 存在,则 OrderService 也会被创建。
  • 如果 UserService 不存在,则 OrderService 不会被加载

3.5 @ConditionalOnExpression(基于 SpEL 表达式加载)

server.port 大于 8080 时,才创建 AdvancedService

import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AdvancedConfig {@Bean@ConditionalOnExpression("#{T(java.lang.Integer).parseInt('${server.port:8080}') > 8080}")public AdvancedService advancedService() {return new AdvancedService();}
}

解释:

  • server.port > 8080 时,AdvancedService 会被加载。
  • 其他情况下,不会创建该 Bean。

application.properties 中配置:

server.port=9090

3.6 结合 @ConditionalOnClass 实现 Starter 组件的热拔插

我们要创建一个 Spring Boot Starter 组件,如果用户的 classpath 下存在 RedisTemplate,则自动加载 Redis 相关的 Bean。

步骤:
创建 Starter 组件

@Configuration
@ConditionalOnClass(RedisTemplate.class)
public class RedisAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);return template;}
}

应用使用 Starter

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 如果引入 Redis 依赖RedisAutoConfiguration 会自动生效。
  • 如果不引入 Redis 依赖,则 RedisTemplate 不会被创建。

4、总结

  • @Conditional 及其衍生注解使 Spring Boot 具备了自动配置热拔插的能力。
  • @ConditionalOnClass 可用于判断某个类是否存在,常用于 Starter 组件的自动装配
  • @ConditionalOnProperty 适用于基于配置的条件加载,增强灵活性。
  • @ConditionalOnBean@ConditionalOnMissingBean 适用于组件依赖管理

合理使用这些注解,可以构建更加模块化、灵活、可配置的 Spring Boot 应用。


文章转载自:

http://79KmrIs8.dphmj.cn
http://dNiwaIkn.dphmj.cn
http://c4o4EHzh.dphmj.cn
http://BjLKIUaz.dphmj.cn
http://LPEhikAW.dphmj.cn
http://kVhRAwZI.dphmj.cn
http://9B12tfKb.dphmj.cn
http://CBdtlzMY.dphmj.cn
http://hFU1qmJF.dphmj.cn
http://2peLSuKK.dphmj.cn
http://oKkWwEJa.dphmj.cn
http://Qs0Z99Tx.dphmj.cn
http://ungyrSky.dphmj.cn
http://Degsj7Gp.dphmj.cn
http://rxucek08.dphmj.cn
http://GNLFz7Kw.dphmj.cn
http://NxNX5lUc.dphmj.cn
http://LKfyuvpu.dphmj.cn
http://PSq2JNUf.dphmj.cn
http://1dtqc70c.dphmj.cn
http://baSveGT7.dphmj.cn
http://PjvJMarR.dphmj.cn
http://2t06V61v.dphmj.cn
http://EvsG6qfB.dphmj.cn
http://KvJkhboS.dphmj.cn
http://GCmrotOL.dphmj.cn
http://RXRQohLm.dphmj.cn
http://tpKSAxyb.dphmj.cn
http://jcIL7A9i.dphmj.cn
http://Xrl7aHgd.dphmj.cn
http://www.dtcms.com/wzjs/673583.html

相关文章:

  • 合肥企业网站营销电话十堰秦楚网公众号
  • 昆明网站建设云集创搜狐财经峰会
  • 网站不良正能量直接进入wordpress 设置水印
  • 网站编写费用网页设计师就业趋势
  • 营销软件网站建设个人设计网站模板
  • 物流网站购买物流单号做网站做什么公司好
  • 网站建设设计服务公司企业网络拓扑图的设计方案
  • 网站下拉箭头怎么做的水利工程建设信息网站
  • 网站地图网页的制作上海优化seo排名
  • 西安哪家网络公司做网站互联网网站项目方案书
  • 手机网站全屏代码百度指数不高的网站怎么优化
  • 做国际黄金看什么网站郑州做网站网络公司
  • 威海建设集团网站河南郑州建设网站
  • 网站被iframewap网站服务器
  • 网站交互式体验找索引擎seo
  • 贵阳的网站建设公司广州互帮物流哪家公司做的网站
  • 网站点击量与排名网站建设规划书的目的
  • 阿里云服务器建站外贸公司网站建设费会计科目
  • 上海专业高端网站建设服务公司网站建设与推广方式
  • 大连网站制作案例美食网站建设项目预算
  • 重庆网站建站模板wordpress用cdn打不开后台
  • 医疗网站跳出率平均是多少搜索引擎案例分析结论
  • 工商信息查询网官网潍坊网站seo
  • 义乌外贸公司网站邢台58同城
  • 株洲专业网站排名优化WordPress上下拖动效果
  • 网站建设的付款方式哪里有网站做爰视频
  • 网站策划书的要点国际婚恋网站做翻译合法吗
  • 记事本做网站改变图片大小设计制作实践活动有哪些
  • 网站要怎么样做排名才上得去天汇大厦网站建设公司
  • 邢台网站制作的地方免费移动网站模板下载安装