diff --git a/app/app/src/main/java/com/workshop/magic/app/WorkshopApplication.java b/app/app/src/main/java/com/workshop/magic/app/WorkshopApplication.java index 2c9880b..63f4a07 100644 --- a/app/app/src/main/java/com/workshop/magic/app/WorkshopApplication.java +++ b/app/app/src/main/java/com/workshop/magic/app/WorkshopApplication.java @@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; public class WorkshopApplication { public static void main(String[] args) { + System.setProperty("my.custom.condition", "true"); SpringApplication.run(WorkshopApplication.class, args); } } diff --git a/app/app/src/main/resources/application.properties b/app/app/src/main/resources/application.properties index c4f7376..caa4765 100644 --- a/app/app/src/main/resources/application.properties +++ b/app/app/src/main/resources/application.properties @@ -1,3 +1,3 @@ debug=true workshop.greeting.text=Gude -workshop.greeting.type=logger +workshop.greeting.type=none diff --git a/components/library-autoconfigure/src/main/java/com/workshop/magic/config/GreetingAutoConfiguration.java b/components/library-autoconfigure/src/main/java/com/workshop/magic/config/GreetingAutoConfiguration.java index 8bc8fd9..3ad529a 100644 --- a/components/library-autoconfigure/src/main/java/com/workshop/magic/config/GreetingAutoConfiguration.java +++ b/components/library-autoconfigure/src/main/java/com/workshop/magic/config/GreetingAutoConfiguration.java @@ -1,6 +1,7 @@ package com.workshop.magic.config; import com.workshop.magic.service.GreetingService; +import com.workshop.magic.service.slf4j.BeepGreetingService; import com.workshop.magic.service.slf4j.LoggerGreetingService; import com.workshop.magic.service.stdout.StdOutGreetingService; @@ -32,4 +33,11 @@ public class GreetingAutoConfiguration { return new LoggerGreetingService(properties.getText()); } + @Bean + @ConditionalOnMissingBean + @MyCustomCondition + @ConditionalOnClass(BeepGreetingService.class) + GreetingService beepGreetingService(GreetingProperties properties) { + return new BeepGreetingService(properties.getText()); + } } diff --git a/components/library-autoconfigure/src/main/java/com/workshop/magic/config/MyCustomCondition.java b/components/library-autoconfigure/src/main/java/com/workshop/magic/config/MyCustomCondition.java new file mode 100644 index 0000000..a4bf055 --- /dev/null +++ b/components/library-autoconfigure/src/main/java/com/workshop/magic/config/MyCustomCondition.java @@ -0,0 +1,16 @@ +package com.workshop.magic.config; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.context.annotation.Conditional; + +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Conditional({OnCustomCondition.class}) +@interface MyCustomCondition { +} diff --git a/components/library-autoconfigure/src/main/java/com/workshop/magic/config/OnCustomCondition.java b/components/library-autoconfigure/src/main/java/com/workshop/magic/config/OnCustomCondition.java new file mode 100644 index 0000000..17e84f5 --- /dev/null +++ b/components/library-autoconfigure/src/main/java/com/workshop/magic/config/OnCustomCondition.java @@ -0,0 +1,22 @@ +package com.workshop.magic.config; + +import java.util.Locale; + +import org.springframework.boot.autoconfigure.condition.ConditionOutcome; +import org.springframework.boot.autoconfigure.condition.SpringBootCondition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +class OnCustomCondition extends SpringBootCondition { + @Override + public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { + String value = System.getProperty("my.custom.condition"); + if (value == null) { + return ConditionOutcome.noMatch("No 'my.custom.condition' system property found"); + } + if (value.toLowerCase(Locale.ROOT).equals("true")) { + return ConditionOutcome.match("'my.custom.condition' system property is true"); + } + return ConditionOutcome.noMatch("'my.custom.condition' system property is '%s'".formatted(value)); + } +}