`
raymond.chen
  • 浏览: 1426296 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自定义Conditional

 
阅读更多

常用的内置Conditional注解

       @ConditionalOnClass:当classpath下有指定的类的条件下

       @ConditionalOnMissingClass:当classpath下没有指定的类的条件下

       @ConditionalOnBean:当容器中有指定的Bean的条件下

       @ConditionalOnMissingBean:当容器中没有指定Bean的条件下

       @ConditionalOnProperty(prefix = “example.service”, value = “enabled”, matchIfMissing = true),当配置文件中example.service.enabled=true时进行自动配置,如果没有设置此值就默认使用matchIfMissing对应的值

       @ConditionalOnExpression:基于SpEL表达式作为判断条件

       @ConditionalOnJava:基于JVM版本作为判断条件

       @ConditionalOnJndi:在JNDI存在的条件下

       @ConditionalOnNotWebApplication:当前不是Web环境

       @ConditionalOnWebApplication:当前是Web环境

       @ConditionalOnResource:当类路径下有指定的资源

       @ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者在有多个Bean的情况下,用来指定首选的Bean

 

其他注解:

       @AutoConfigureBefore         用在自动配置类上,在加载参数类之前先加载当前类

       @AutoConfigureAfter            用在自动配置类上,在加载参数类之后再加载当前类

               比如: @AutoConfigureAfter(DataSourceAutoConfiguration.class)

 

@Conditional注解类

       用来标识一个Spring Bean或者Configuration配置文件,当满足指定的条件才开启配置。

       范例:

             @Conditional(OnClassCondition.class)

             @Conditional(OnMyPropertiesCondition.class)

 

自定义Conditional需要同时创建自定义注解类和Condition的实现类。

自定义Conditional可以实现Condition接口,也可以继承SpringBootCondition抽象类。

 

Condition的实现类:

public class OnMyPropertiesCondition extends SpringBootCondition {
	public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
		Object propertiesName = metadata.getAnnotationAttributes(ConditionalOnMyProperties.class.getName()).get("name");
		if (propertiesName != null) {
			String value = context.getEnvironment().getProperty(propertiesName.toString());
			if (value != null) {
				return new ConditionOutcome(true, "get properties");
//return ConditionOutcome.match("get properties");
			}
		}
		return new ConditionOutcome(false, "non get properties");
//return ConditionOutcome.noMatch("non get properties");
} }

 

自定义注解类:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(OnMyPropertiesCondition.class)
public @interface ConditionalOnMyProperties {
	String name();
}

 

自定义注解需要配合Configuration注解才能生效

@Configuration
@ConditionalOnMyProperties(name = "message")
public class ConditionClass {
	@Bean
	public HelloWorld helloWorld() {
		return new HelloWorld();
	}
}

 

分享到:
评论

相关推荐

    Spring Boot conditional注解用法详解

    在使用自定义 Conditional 注解时,我们需要在注解中引入 Conditional 注解,并且引入自定义的 Condition 实现类,例如: ```java @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy....

    spring里@Conditional注解使用示例代码

    在Spring框架中,`@Conditional`注解是一个强大的特性,它允许我们有条件地加载bean,也就是说,只有当特定条件满足时,对应的bean才会被Spring容器实例化并注册。这个注解是Spring Boot的一个核心功能,使得我们...

    spring-example-conditional:带有 Spring Boot 的自定义 Spring 4 @Conditional 注释示例

    自定义@Conditional 注释示例什么是@Conditional 是添加到 Spring 4 的注解,用于指定处理特定配置或将特定 bean 注册到 Spring 上下文的条件。为什么重要Spring Boot 项目自动配置支持依赖于 @Conditional - 它有...

    @Conditional注解应用.rar

    压缩包中的`conditional`文件可能包含了使用`@Conditional`注解的示例代码,这些代码可以帮助你理解如何创建自定义条件类以及如何在实际项目中应用`@Conditional`。通过分析这些示例,你可以学习如何根据不同的条件...

    SpringBoot中使用@Conditional示例代码

    同时,我们也可以自定义`Condition`类,实现更加复杂的逻辑。 ### 结论 `@Conditional`是Spring Boot中的一个重要特性,它允许我们在运行时根据特定条件决定Bean的装配。这使得我们能够灵活地调整应用的行为,适应...

    conditional_vec_conditional_vec_

    3. **自定义函数**:HSPICE支持用户定义函数(UDF),这允许工程师编写C语言代码来扩展其功能。`conditional_vec`可能是UDF的一部分,用于在仿真过程中执行复杂的条件检查和操作。 4. **仿真控制**:在HSPICE中,...

    springboot自定义自动装配.rar

    3. **利用`@Conditional`**:自定义条件注解,如继承`@Conditional`,根据特定条件决定Bean是否应该被创建。例如,只有当某个类存在时才装配对应的Bean。 4. **`@Import`导入其他配置**:如果需要引用其他配置,...

    使用了自定义springboot-starter组件的示例项目【study-springboot】

    - 编写自动配置类(如果需要),利用`@Configuration`和`@Conditional`注解,使组件能在满足特定条件时自动配置。 - 创建Bean,可以使用`@Component`、`@Service`、`@Repository`和`@Controller`注解,根据需要选择...

    SpringBoot启动配置原理_SpringBoot自定义starters.zip

    2. **自动配置类**:创建一个 `@Configuration` 类,其中包含 `@Conditional` 注解,以决定在满足特定条件(比如特定库存在)时启用配置。这个类可以提供 Bean,这些 Bean 会根据配置自动注入到其他地方。 3. **元...

    前端开源库-lws-conditional-get.zip

    lws库是一个轻量级的web服务器,通常被用作嵌入式环境或开发人员自定义HTTP服务的组件。它支持多种HTTP特性,包括Conditional Get。使用lws库,开发者可以轻松地在自己的前端项目中集成这一功能,确保只获取最新的、...

    winform Conditional特性

    5. **自定义逻辑**: - 开发者可以定义自己的预处理器符号,根据项目需求来控制代码的执行。例如,可以定义一个“DEBUG”符号,在开发阶段启用某些功能,而在生产环境中禁用。 6. **注意事项**: - 虽然...

    前端开源库-lws-conditional-get

    3. 提供API接口,方便开发者自定义条件获取的逻辑。 4. 兼容多种浏览器和环境,确保在各种应用场景下都能正常工作。 在实际应用中,开发者可以将lws-conditional-get与其他前端库结合使用,比如与React、Vue或...

    Spring之条件注解@Conditional(Demo)

    这个注解使得我们能够在运行时根据系统环境、配置或其他自定义逻辑来选择性地加载和初始化Bean。这为我们的应用提供了高度的灵活性和可配置性。 `@Conditional`注解通常与`@Configuration`或`@Bean`注解一起使用。...

    springboot自定义starter

    在Spring Boot框架中,自定义Starter是一种非常实用的技术,它允许开发者创建可重用的模块,以便在多个项目间快速引入和配置依赖。通过创建自定义Starter,我们可以简化项目构建过程,提高代码的可维护性和一致性。...

    自定义springboot-starter项目源码【cwp-spring-boot-starter】

    自动配置类(@Configuration)是SpringBoot的一大特色,它们通过条件注解(@Conditional)来决定何时加载特定的配置。例如,如果在项目中检测到某个特定的Bean或属性存在,那么对应的配置就会生效。 `src/test`包含...

    浅谈SpringBoot中的@Conditional注解的使用

    首先,我们需要在 application.yml 文件中添加一个自定义配置,例如: ``` create.bean: product ``` 然后,我们创建一个实现了 Condition 接口的类,例如 ProductCondition: ```java public class ...

    如何自定义一个SpringBoot中的starter代码实例.zip

    本实例将详细介绍如何自定义一个Spring Boot Starter,以便为你的项目提供定制化的功能。 1. **创建Maven父工程** 首先,我们需要创建一个Maven父工程,它将包含我们的starter模块和其他可能的子项目。在`pom.xml`...

    conditional-query.zip

    这是创建自定义条件筛选器运算符的示例。

    自定义starter

    这时,可以使用`@Conditional`注解家族,比如`@ConditionalOnClass`、`@ConditionalOnMissingBean`等。 7. **编写文档**:为了使其他开发者能更好地理解和使用你的Starter,编写详细的README文件至关重要。它应该...

    自定义spring-boot-starter封装

    1. **自动配置类(Auto Configuration)**:这是`spring-boot-starter`的核心,通过`@Configuration`和`@Conditional`注解,Spring Boot能根据类路径中的存在与否自动配置相应的bean。 2. ** starter-pom.xml**:这...

Global site tag (gtag.js) - Google Analytics