首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在@ConditionalOnProperty设置为false的情况下加载类。

在Spring框架中,@ConditionalOnProperty注解用于根据配置属性来决定是否加载某个Bean。当该注解的name属性指定的属性值与havingValue属性指定的值匹配时,条件成立,对应的Bean才会被加载。

如果你希望在@ConditionalOnProperty设置为false的情况下仍然加载某个类,可以通过以下几种方法实现:

方法一:使用@ConditionalOnMissingBean

你可以创建一个自定义的条件注解,并结合@ConditionalOnMissingBean来实现。

代码语言:txt
复制
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CustomConfig {

    @Bean
    @ConditionalOnMissingBean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

在这个例子中,MyService会在没有其他相同类型的Bean时被加载。

方法二:使用@Profile

你可以使用Spring的@Profile注解来指定在特定的profile下加载Bean。

代码语言:txt
复制
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
public class ProfileConfig {

    @Bean
    @Profile("!conditionalOnProperty")
    public MyService myService() {
        return new MyServiceImpl();
    }
}

在这个例子中,MyService会在profile为conditionalOnProperty以外的情况下被加载。

方法三:手动注册Bean

你可以在配置类中手动注册Bean,而不使用条件注解。

代码语言:txt
复制
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ManualConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

在这个例子中,MyService会始终被加载,不受@ConditionalOnProperty的影响。

应用场景

  • 开发环境:在开发环境中,你可能希望某些Bean始终加载,以便于调试和测试。
  • 特定需求:某些功能可能需要在所有环境下都可用,不受配置属性的影响。

参考链接

通过以上方法,你可以在@ConditionalOnProperty设置为false的情况下加载类。选择哪种方法取决于你的具体需求和应用场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Boot中@ConditionalOnProperty使用详解

如果true,没有该配置属性时也会正常加载;反之则不会生效 boolean matchIfMissing() default false; } 其中在历史版本中还存在一个relaxedNames属性...首先看matchIfMissing属性,用来指定如果配置文件中未进行对应属性配置时默认处理:默认情况下matchIfMissingfalse,也就是说如果未进行属性配置,则自动配置不生效。...false时,如果name值空,则返回false;如果name不为空,则将该值与havingValue指定值进行比较,如果一样则返回true,否则返回false。...返回false也就意味着自动配置不会生效。 但是如果看HttpEncodingAutoConfiguration属性配置发现并没有完全按照上面所说name和havingValue配合使用。...这里并没有设置havingValue值,如果havingValue未指定值,默认情况下在属性配置中设置true则生效(如上配置),false则不生效。

3.8K10
  • SpringBoot遗忘知识点整理

    注解使用 坑===> @DateTimeFormat无效原因 @ConditionalOnProperty TIMESTAMP设置CURRENT_TIMESTAMP 不能自动插入当前时间 @transient...class FilterConfig { //prefix配置文件中前缀, //name配置名字 //havingValue是与配置值对比值,当两个值相同返回true,配置生效....filter.loginFilter=true 总结: 通过@ConditionalOnProperty控制配置是否生效,可以将配置与代码进行分离,实现了更好控制配置....@ConditionalOnProperty实现是通过havingValue与配置文件中值对比,返回true则配置生效,反之失效. ---- TIMESTAMP设置CURRENT_TIMESTAMP...注解 重点来了: 就像是说---->添加了@Transient注解数据将会加载到使用者电脑内存中,而不会被加载到磁盘里持久化,不保存数据,但是使用时候一直存在.

    44610

    SpringBoot自动配置原理及实现

    @SpringBootConfiguration:标记当前配置 @EnableAutoConfiguration:开启自动配置 @ComponentScan:扫描主所在同级包以及下级包里...,属性enabled,有值时true,没有匹配到则为false:以上条件true则实例化,否则不是实例化 @ConditionalOnProperty( prefix = "spring.application.admin...都能看到各种各样条件判断注解,满足条件时就加载这个Bean并实例化 此类条件注解是:@ConditionalOnProperty @ConditionalOnBean:当容器里有指定Bean条件下...@ConditionalOnClass:当路径下有指定条件下 @ConditionalOnExpression:基于SpEL表达式true时候作为判断条件才去实例化 @ConditionalOnJava...=enabled情况下,如果没有设置则默认为true,即条件符合 @ConditionalOnMissingBean当容器中没有这个Bean时新建Bean 案例扩展 /** * @author wuweifeng

    36030

    为了控制Bean加载我使出了这些杀手锏

    通过@ConditionalOnProperty 来决定 MqConfig 是否要加载,@ConditionalOnProperty name 就是配置项名称,havingValue 就是匹配值...方案一:@ConditionalOnProperty 还是坚持使用@ConditionalOnProperty,既然不能通过环境来,我们可以单独增加一个属性来决定是否要启用 Mq, 比如定义:mq.enabled...方案二:继承 SpringBootCondition 自定义条件 可以使用@Conditional(MqConditional.class)注解,自定义一个条件,在中去判断是否要加载 bean。...在中可以使用其他 Conditional 注解来进行判断,比如使用@ConditionalOnProperty。...所以需要在依赖时候设置 Feign Maven 依赖 optional=true,让使用者自己去引入依赖。

    49430

    为了控制Bean加载我使出了这些杀手锏

    通过@ConditionalOnProperty 来决定 MqConfig 是否要加载,@ConditionalOnProperty name 就是配置项名称,havingValue 就是匹配值...方案一:@ConditionalOnProperty 还是坚持使用@ConditionalOnProperty,既然不能通过环境来,我们可以单独增加一个属性来决定是否要启用 Mq, 比如定义:mq.enabled...方案二:继承 SpringBootCondition 自定义条件 可以使用@Conditional(MqConditional.class)注解,自定义一个条件,在中去判断是否要加载 bean。...在中可以使用其他 Conditional 注解来进行判断,比如使用@ConditionalOnProperty。...所以需要在依赖时候设置 Feign Maven 依赖 optional=true,让使用者自己去引入依赖。

    1.2K40

    SpringBoot如何创建一个自定义注解

    @Target:用于描述注解使用范围,依赖于枚举ElementType ,具体如下:public enum ElementType { /**用于描述、接口(包括注解类型) 或enum声明...通常情况下,Java编译器在生成文档时不会包含注解信息,但是使用了@Documented注解后,编译器会将被注解元素注解信息包含在生成文档中,这样可以使得开发者在查看文档时能够更清晰地了解被注解元素相关信息...@Around: 包围一个连接点(join point)通知,方法调用。这是最强大一种通知类型。 环绕通知可以在方法调用前后完成自定义行为。...“登录、退出登录” 此时type可以使用统一字符串,这样可以将关于用户行为日志全部查出 然后再根据不同name将这些日志进一步细分 * name同时也用于前端显示 在上述例子中,可以将type设置...“user.operation” 登录name设置“用户登录” 退出登录name设置“退出登录” * * @author 奇怪 */@Target({ElementType.METHOD})@Retention

    28810

    14-SpringBoot自动配置-Condition

    ,ClassCondition 重写 matches 方法默认返回 false,所以我们下面使用 IOC 获取 user bean 对象会失败,如下: 如果设置 true,那么则可以获取到 bean...案例2 - 通过动态指定启动坐标的配置,判断是否创建 bean 对象 需求 在Spring IOC 容器中创建一个Userbean,现要求: 将判断定义动态。...} 2.在创建 Bean 方法换上使用自定义条件注解,并指定希望设置依赖 @Bean //@Conditional(ClassCondition.class) // 定义ClassCondition...false,不允许创建bean flag = false; } return flag; } } 6.测试验证 首先当然是验证设置了依赖情况...演示使用 ConditionalOnProperty 注解 1.编写创建 user bean 方法,需要设置 ConditionalOnProperty 定义需要属性值 image-20220224204200775

    54020

    教你写Spring组件

    组件接入方式 三、使用简单配置接入方式 使用配置接入 Spring ,一般需要搭配 PostConstruct 来使用,并且要确保 Spring 能扫描到配置 ,在组件 quartz-configable...,这是因为有 @ConditionalOnProperty 存在 @ConditionalOnProperty 作用: 根据提供条件判断对应属性是否存在,存在,则加载此配置,不存在,则忽略。...,比如,应用路径常常 com.xxx.xxx,而组件路径常常 com.xxx.yyy,这时候,经常需要为 Spring 指定扫描路径,才能把我们组件加载进去,如果在自己项目当中加载上述 quartz-configable...Springboot 在加载时候,会扫描 classpath 下 META-INF/spring.factories 文件,当发现了 spring.factories 文件后,根据文件中配置来加载...要加载自动配置,Springboot根据配置自动去加载配置 借用这个规则,现在来升级我们 quartz-configable 组件 我们在组件项目 resources 目录下添加 META-INF

    49720

    SpringBoot基础篇Bean之条件注入@ConditionalOnProperty

    本文将主要介绍根据配置来决定是否创建bean注解@ConditionalOnProperty <!...配置如下 /** * 配置存在时才会加载这个bean * * @return */ @Bean @ConditionalOnProperty("conditional.property") public...propertyValueNotExistBean.getName()); return JSONObject.toJSONString(result); } } 执行后结果如下,一预期...更多博文 基础篇 181009-SpringBoot基础篇Bean之基本定义与使用 181012-SpringBoot基础篇Bean之自动加载 181013-SpringBoot基础篇Bean之动态注册...声明 尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,发现bug或者有更好建议,欢迎批评指正,不吝感激 微博地址: 小灰灰Blog QQ: 一灰灰/3302797840

    6.1K01

    使用@ConditionalOnProperty注解

    { /** * String数组 该属性与下面的 name 属性不可同时使用, * 当value所对应配置文件中false时,注入不生效,不为fasle注入生效 *...havingValue值相同时,注入生效 */ String havingValue() default ""; /** * 配置中缺少对应属性时,是否可以被注入;true时缺少对应配置可注入 *.../ boolean matchIfMissing() default false;} */ String havingValue() default ""; /** *该属性true时,配置文件中缺少对应...value或name对应属性值,也会注入成功 */ boolean matchIfMissing() default false; // 对应测试注入情况 @Configuration @ConditionalOnProperty...(prefix = "parentName",name = {"sonName","flag"})  //name中属性需要两个都存在且都不为false才会加载正常 .yml配置如下:     parentName

    2.9K30

    SpringBoot条件装配,彻底爱了!

    SpringBoot开发者提供了三种可选条件装配方式。 Profile Conditional ConditionalOnProperty 下面,我们一起来了解一下具体应用实践。...如果当前Profile设置dev,则Spring容器会调用initFileUploader()创建FileUploader,否则,调用initOSSUploader()创建OSSUploader。...:在Web环境中条件生效 ConditionalOnExpression:根据表达式判断条件是否生效 我们以最常用@ConditionalOnProperty注解例,将上面的代码改成如下方式即可实现按照条件进行加载...,会加载FileUploader;当file.storage配置值oss,会加载OSSUploader。...其中@ConditionalOnPropertymatchIfMissing参数表示,当没有找到对应配置参数时,会默认加载当前,也就是FileUploader

    35820

    Spring Cloud Zuul动态路由怎样做?集成Nacos实现很简单

    ,并且以Nacos数据源来讲解 二、实现要点 要实现动态路由只需关注下面4个点 网关启动时,动态路由数据怎样加载进来 静态路由与动态路由以那个为准,ps:静态路由指的是配置文件里写死路由配置 监听动态路由数据源变化...实现动态路由数据加载 重写SimpleRouteLocatorlocateRoutes方法,此方法是加载路由配置,父中是获取properties中路由配置,可以通过扩展此方法,达到动态获取配置目的...,由子类去实现 */ public abstract Map loadDynamicRoute(); } 由于动态路由数据可以有很多种途径,:...Nacos、Redis、Zookeeper、DB等,所以这里定义一个抽象,由具体实现去定义loadDynamicRoute方法 3.2....配置创建NacosDynRouteLocatorBean DynamicZuulRouteConfig @Configuration @ConditionalOnProperty(prefix =

    1.4K30

    在Spring Boot中实现类似SPI机制功能(二)

    二、基于Spring条件化配置 Spring框架条件化注解(@ConditionalOnClass、@ConditionalOnProperty等)允许根据特定条件来决定是否加载和注册Bean。...这种方法可以实现类似SPI动态加载效果。例如,你可以根据配置文件中属性值来决定加载哪个服务提供者实现。...GenericBeanDefinition(); beanDefinition.setBeanClassName("com.example.MyServiceImpl1"); // 设置实现全限定名...beanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON); // 设置作用域单例(根据需要选择)...但总体来说,通过利用Spring框架提供强大功能和扩展机制(条件化配置、FactoryBean、BeanDefinition等),我们可以灵活地实现各种类似SPI效果来满足项目需求并提高代码可维护性和可扩展性

    22310
    领券