diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/generator/InjectionGenerator.java b/spring-beans/src/main/java/org/springframework/beans/factory/generator/InjectionGenerator.java index a658ee6aa09..13af095cc75 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/generator/InjectionGenerator.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/generator/InjectionGenerator.java @@ -224,7 +224,7 @@ public class InjectionGenerator { CodeBlock generateFieldInjection(Field injectionPoint, boolean required) { Builder code = CodeBlock.builder(); - code.add("instanceContext.field($S, $T.class", injectionPoint.getName(), injectionPoint.getType()); + code.add("instanceContext.field($S", injectionPoint.getName()); code.add(")\n").indent().indent(); if (required) { code.add(".invoke(beanFactory, (attributes) ->"); @@ -236,8 +236,8 @@ public class InjectionGenerator { if (hasAssignment) { code.beginControlFlow(""); String fieldName = String.format("%sField", injectionPoint.getName()); - code.addStatement("$T $L = $T.findField($T.class, $S, $T.class)", Field.class, fieldName, ReflectionUtils.class, - injectionPoint.getDeclaringClass(), injectionPoint.getName(), injectionPoint.getType()); + code.addStatement("$T $L = $T.findField($T.class, $S)", Field.class, fieldName, ReflectionUtils.class, + injectionPoint.getDeclaringClass(), injectionPoint.getName()); code.addStatement("$T.makeAccessible($L)", ReflectionUtils.class, fieldName); code.addStatement("$T.setField($L, bean, attributes.get(0))", ReflectionUtils.class, fieldName); code.unindent().add("}"); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/generator/config/BeanDefinitionRegistrar.java b/spring-beans/src/main/java/org/springframework/beans/factory/generator/config/BeanDefinitionRegistrar.java index ce38e3292cd..111d8e43e8f 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/generator/config/BeanDefinitionRegistrar.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/generator/config/BeanDefinitionRegistrar.java @@ -298,11 +298,10 @@ public final class BeanDefinitionRegistrar { /** * Create an {@link InjectedElementResolver} for the specified field. * @param name the name of the field - * @param type the type of the field * @return a resolved for the specified field */ - public InjectedElementResolver field(String name, Class type) { - return new InjectedFieldResolver(getField(name, type), this.beanName); + public InjectedElementResolver field(String name) { + return new InjectedFieldResolver(getField(name), this.beanName); } /** @@ -315,9 +314,9 @@ public final class BeanDefinitionRegistrar { return new InjectedMethodResolver(getMethod(this.beanType, name, parameterTypes), this.beanType, this.beanName); } - private Field getField(String fieldName, Class fieldType) { - Field field = ReflectionUtils.findField(this.beanType, fieldName, fieldType); - Assert.notNull(field, () -> "No field '" + fieldName + "' with type " + fieldType.getName() + " found on " + this.beanType); + private Field getField(String fieldName) { + Field field = ReflectionUtils.findField(this.beanType, fieldName); + Assert.notNull(field, () -> "No field '" + fieldName + "' found on " + this.beanType.getName()); return field; } diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanInstantiationContributorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanInstantiationContributorTests.java index 391e8a33212..99db54a904b 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanInstantiationContributorTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanInstantiationContributorTests.java @@ -44,7 +44,7 @@ class AutowiredAnnotationBeanInstantiationContributionTests { void contributeWithPackageProtectedFieldInjection() { CodeContribution contribution = contribute(PackageProtectedFieldInjectionSample.class); assertThat(CodeSnippet.process(contribution.statements().toCodeBlock())).isEqualTo(""" - instanceContext.field("environment", Environment.class) + instanceContext.field("environment") .invoke(beanFactory, (attributes) -> bean.environment = attributes.get(0))"""); assertThat(contribution.runtimeHints().reflection().typeHints()).singleElement().satisfies(typeHint -> { assertThat(typeHint.getType()).isEqualTo(TypeReference.of(PackageProtectedFieldInjectionSample.class)); @@ -62,9 +62,9 @@ class AutowiredAnnotationBeanInstantiationContributionTests { void contributeWithPrivateFieldInjection() { CodeContribution contribution = contribute(PrivateFieldInjectionSample.class); assertThat(CodeSnippet.process(contribution.statements().toCodeBlock())).isEqualTo(""" - instanceContext.field("environment", Environment.class) + instanceContext.field("environment") .invoke(beanFactory, (attributes) -> { - Field environmentField = ReflectionUtils.findField(AutowiredAnnotationBeanInstantiationContributionTests.PrivateFieldInjectionSample.class, "environment", Environment.class); + Field environmentField = ReflectionUtils.findField(AutowiredAnnotationBeanInstantiationContributionTests.PrivateFieldInjectionSample.class, "environment"); ReflectionUtils.makeAccessible(environmentField); ReflectionUtils.setField(environmentField, bean, attributes.get(0)); })"""); @@ -99,9 +99,9 @@ class AutowiredAnnotationBeanInstantiationContributionTests { void contributeWithInjectionPoints() { CodeContribution contribution = contribute(ResourceInjectionBean.class); assertThat(CodeSnippet.process(contribution.statements().toCodeBlock())).isEqualTo(""" - instanceContext.field("testBean", TestBean.class) + instanceContext.field("testBean") .resolve(beanFactory, false).ifResolved((attributes) -> { - Field testBeanField = ReflectionUtils.findField(AutowiredAnnotationBeanPostProcessorTests.ResourceInjectionBean.class, "testBean", TestBean.class); + Field testBeanField = ReflectionUtils.findField(AutowiredAnnotationBeanPostProcessorTests.ResourceInjectionBean.class, "testBean"); ReflectionUtils.makeAccessible(testBeanField); ReflectionUtils.setField(testBeanField, bean, attributes.get(0)); }); diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/generator/InjectionGeneratorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/generator/InjectionGeneratorTests.java index d3c073bf526..708a3de9955 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/generator/InjectionGeneratorTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/generator/InjectionGeneratorTests.java @@ -142,7 +142,7 @@ class InjectionGeneratorTests { void generateInjectionForRequiredField() { Field field = field(SampleBean.class, "counter"); assertThat(generateInjection(field, true)).isEqualTo(""" - instanceContext.field("counter", Integer.class) + instanceContext.field("counter") .invoke(beanFactory, (attributes) -> bean.counter = attributes.get(0))"""); } @@ -150,7 +150,7 @@ class InjectionGeneratorTests { void generateInjectionForNonRequiredField() { Field field = field(SampleBean.class, "counter"); assertThat(generateInjection(field, false)).isEqualTo(""" - instanceContext.field("counter", Integer.class) + instanceContext.field("counter") .resolve(beanFactory, false).ifResolved((attributes) -> bean.counter = attributes.get(0))"""); } @@ -158,9 +158,9 @@ class InjectionGeneratorTests { void generateInjectionForRequiredPrivateField() { Field field = field(SampleBean.class, "source"); assertThat(generateInjection(field, true)).isEqualTo(""" - instanceContext.field("source", String.class) + instanceContext.field("source") .invoke(beanFactory, (attributes) -> { - Field sourceField = ReflectionUtils.findField(InjectionGeneratorTests.SampleBean.class, "source", String.class); + Field sourceField = ReflectionUtils.findField(InjectionGeneratorTests.SampleBean.class, "source"); ReflectionUtils.makeAccessible(sourceField); ReflectionUtils.setField(sourceField, bean, attributes.get(0)); })"""); diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/generator/config/BeanDefinitionRegistrarTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/generator/config/BeanDefinitionRegistrarTests.java index 8c97229f6d6..962401d434d 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/generator/config/BeanDefinitionRegistrarTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/generator/config/BeanDefinitionRegistrarTests.java @@ -257,8 +257,8 @@ class BeanDefinitionRegistrarTests { beanFactory.registerSingleton("environment", environment); BeanDefinitionRegistrar.of("test", InjectionSample.class).instanceSupplier(instanceContext -> { InjectionSample bean = new InjectionSample(); - instanceContext.field("environment", Environment.class).invoke(beanFactory, - attributes -> bean.environment = (attributes.get(0))); + instanceContext.field("environment").invoke(beanFactory, attributes -> + bean.environment = (attributes.get(0))); return bean; }).register(beanFactory); assertBeanFactory(beanFactory, () -> { @@ -271,11 +271,10 @@ class BeanDefinitionRegistrarTests { void registerWithInvalidField() { DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); BeanDefinitionRegistrar.of("test", InjectionSample.class).instanceSupplier(instanceContext -> - instanceContext.field("doesNotExist", Object.class).resolve(beanFactory)).register(beanFactory); + instanceContext.field("doesNotExist").resolve(beanFactory)).register(beanFactory); assertThatThrownBy(() -> beanFactory.getBean(InjectionSample.class) - ).isInstanceOf(BeanCreationException.class) - .hasMessageContaining("No field '%s' with type %s found", "doesNotExist", Object.class.getName()) - .hasMessageContaining(InjectionSample.class.getName()); + ).isInstanceOf(BeanCreationException.class).hasMessageContaining( + "No field 'doesNotExist' found on " + InjectionSample.class.getName()); } @Test