diff --git a/inject-groovy/src/test/groovy/io/micronaut/inject/requires/RequiresBeanPropertiesSpec.groovy b/inject-groovy/src/test/groovy/io/micronaut/inject/requires/RequiresBeanPropertiesSpec.groovy index 59144fb7dc4..0cd639f96af 100644 --- a/inject-groovy/src/test/groovy/io/micronaut/inject/requires/RequiresBeanPropertiesSpec.groovy +++ b/inject-groovy/src/test/groovy/io/micronaut/inject/requires/RequiresBeanPropertiesSpec.groovy @@ -598,4 +598,45 @@ class TestBeanFactory cleanup: context.close() } + + void "test requires with default interface methods"() { + given: + ApplicationContext context = buildContext(''' +package test; +import io.micronaut.context.annotation.Bean; +import io.micronaut.context.annotation.Property; +import io.micronaut.context.annotation.Requires; +import io.micronaut.core.util.Toggleable; +import jakarta.inject.Singleton; + +interface Configuration extends Toggleable {} + +@Singleton +class ConfigurationImpl implements Configuration +{ + boolean enabled = false; + + @Override + boolean isEnabled() { + return enabled; + } +} + +@Requires(bean = Configuration.class, beanProperty = "enabled", value = "true") +@Singleton +class TestBean { +} +''') + def type = context.classLoader.loadClass('test.TestBean') + + when: + context.getBean(type) + + then: + thrown(NoSuchBeanException.class) + + cleanup: + context.close() + + } } diff --git a/inject-java/src/test/groovy/io/micronaut/inject/requires/RequiresBeanPropertiesSpec.groovy b/inject-java/src/test/groovy/io/micronaut/inject/requires/RequiresBeanPropertiesSpec.groovy index 95030504f86..9786ebc905f 100644 --- a/inject-java/src/test/groovy/io/micronaut/inject/requires/RequiresBeanPropertiesSpec.groovy +++ b/inject-java/src/test/groovy/io/micronaut/inject/requires/RequiresBeanPropertiesSpec.groovy @@ -899,4 +899,45 @@ class TestBeanFactory cleanup: context.close() } + + void "test requires with default interface methods"() { + given: + ApplicationContext context = buildContext('test.TestBean', ''' +package test; +import io.micronaut.context.annotation.Bean; +import io.micronaut.context.annotation.ConfigurationProperties;import io.micronaut.context.annotation.Factory; +import io.micronaut.context.annotation.Property;import io.micronaut.context.annotation.Requires; +import io.micronaut.core.util.Toggleable; +import jakarta.inject.Singleton; + +interface Configuration extends Toggleable {} + +@Singleton +class ConfigurationImpl implements Configuration +{ + private boolean enabled = false; + + @Override + public boolean isEnabled() { + return this.enabled; + } +} + +@Requires(bean = Configuration.class, beanProperty = "enabled", value = "true") +@Singleton +class TestBean { +} +''') + def type = context.classLoader.loadClass('test.TestBean') + + when: + context.getBean(type) + + then: + thrown(NoSuchBeanException.class) + + cleanup: + context.close() + + } } diff --git a/inject/src/main/java/io/micronaut/inject/writer/BeanDefinitionWriter.java b/inject/src/main/java/io/micronaut/inject/writer/BeanDefinitionWriter.java index 12e5d3a45b4..4b312315a19 100644 --- a/inject/src/main/java/io/micronaut/inject/writer/BeanDefinitionWriter.java +++ b/inject/src/main/java/io/micronaut/inject/writer/BeanDefinitionWriter.java @@ -1217,7 +1217,7 @@ private void buildCheckIfShouldLoadMethod(GeneratorAdapter adapter, Map name.equals(NameUtils.getterNameFor(annotationMemberProperty, readPrefixes))) + .named((name) -> annotationMemberProperty.equals(NameUtils.getPropertyNameForGetter(name, readPrefixes))) .filter((e) -> !e.hasParameters()) ).orElse(null); }