Merge branch '6.0.x'

This commit is contained in:
Stephane Nicoll
2023-05-12 08:59:57 +02:00
5 changed files with 79 additions and 14 deletions

View File

@@ -359,7 +359,8 @@ public class PersistenceAnnotationBeanPostProcessor implements InstantiationAwar
String beanName = registeredBean.getBeanName();
RootBeanDefinition beanDefinition = registeredBean.getMergedBeanDefinition();
InjectionMetadata metadata = findInjectionMetadata(beanDefinition, beanClass, beanName);
Collection<InjectedElement> injectedElements = metadata.getInjectedElements();
Collection<InjectedElement> injectedElements = metadata.getInjectedElements(
registeredBean.getMergedBeanDefinition().getPropertyValues());
if (!CollectionUtils.isEmpty(injectedElements)) {
return new AotContribution(beanClass, injectedElements);
}

View File

@@ -43,6 +43,7 @@ import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.core.test.tools.CompileWithForkedClassLoader;
import org.springframework.core.test.tools.Compiled;
import org.springframework.core.test.tools.TestCompiler;
import org.springframework.lang.Nullable;
import org.springframework.util.ReflectionUtils;
import static org.assertj.core.api.Assertions.assertThat;
@@ -67,6 +68,20 @@ class PersistenceAnnotationBeanPostProcessorAotContributionTests {
this.generationContext = new TestGenerationContext();
}
@Test
void processAheadOfTimeWhenPersistenceUnitOnFieldAndPropertyValueSet() {
RegisteredBean registeredBean = registerBean(DefaultPersistenceUnitField.class);
registeredBean.getMergedBeanDefinition().getPropertyValues().add("emf", "myEntityManagerFactory");
assertThat(processAheadOfTime(registeredBean)).isNotNull(); // Field not handled by property values
}
@Test
void processAheadOfTimeWhenPersistenceUnitOnMethodAndPropertyValueSet() {
RegisteredBean registeredBean = registerBean(DefaultPersistenceUnitMethod.class);
registeredBean.getMergedBeanDefinition().getPropertyValues().add("emf", "myEntityManagerFactory");
assertThat(processAheadOfTime(registeredBean)).isNull();
}
@Test
void processAheadOfTimeWhenPersistenceUnitOnPublicField() {
RegisteredBean registeredBean = registerBean(DefaultPersistenceUnitField.class);
@@ -192,9 +207,7 @@ class PersistenceAnnotationBeanPostProcessorAotContributionTests {
private void testCompile(RegisteredBean registeredBean,
BiConsumer<BiConsumer<RegisteredBean, Object>, Compiled> result) {
PersistenceAnnotationBeanPostProcessor postProcessor = new PersistenceAnnotationBeanPostProcessor();
BeanRegistrationAotContribution contribution = postProcessor
.processAheadOfTime(registeredBean);
BeanRegistrationAotContribution contribution = processAheadOfTime(registeredBean);
BeanRegistrationCode beanRegistrationCode = mock();
contribution.applyTo(generationContext, beanRegistrationCode);
generationContext.writeGeneratedContent();
@@ -202,6 +215,12 @@ class PersistenceAnnotationBeanPostProcessorAotContributionTests {
.compile(compiled -> result.accept(new Invoker(compiled), compiled));
}
@Nullable
private BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) {
PersistenceAnnotationBeanPostProcessor postProcessor = new PersistenceAnnotationBeanPostProcessor();
return postProcessor.processAheadOfTime(registeredBean);
}
static class Invoker implements BiConsumer<RegisteredBean, Object> {
private Compiled compiled;