Polishing
This commit is contained in:
parent
b31a15851e
commit
38c9e7f629
|
@ -46,24 +46,21 @@ import org.springframework.lang.Nullable;
|
|||
* @author Phillip Webb
|
||||
* @since 6.0
|
||||
*/
|
||||
class ScopedProxyBeanRegistrationAotProcessor
|
||||
implements BeanRegistrationAotProcessor {
|
||||
class ScopedProxyBeanRegistrationAotProcessor implements BeanRegistrationAotProcessor {
|
||||
|
||||
private static final Log logger = LogFactory
|
||||
.getLog(ScopedProxyBeanRegistrationAotProcessor.class);
|
||||
private static final Log logger = LogFactory.getLog(ScopedProxyBeanRegistrationAotProcessor.class);
|
||||
|
||||
|
||||
@Override
|
||||
public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) {
|
||||
Class<?> beanType = registeredBean.getBeanType().toClass();
|
||||
if (beanType.equals(ScopedProxyFactoryBean.class)) {
|
||||
String targetBeanName = getTargetBeanName(
|
||||
registeredBean.getMergedBeanDefinition());
|
||||
BeanDefinition targetBeanDefinition = getTargetBeanDefinition(
|
||||
registeredBean.getBeanFactory(), targetBeanName);
|
||||
String targetBeanName = getTargetBeanName(registeredBean.getMergedBeanDefinition());
|
||||
BeanDefinition targetBeanDefinition =
|
||||
getTargetBeanDefinition(registeredBean.getBeanFactory(), targetBeanName);
|
||||
if (targetBeanDefinition == null) {
|
||||
logger.warn("Could not handle " + ScopedProxyFactoryBean.class.getSimpleName()
|
||||
+ ": no target bean definition found with name " + targetBeanName);
|
||||
logger.warn("Could not handle " + ScopedProxyFactoryBean.class.getSimpleName() +
|
||||
": no target bean definition found with name " + targetBeanName);
|
||||
return null;
|
||||
}
|
||||
return BeanRegistrationAotContribution.ofBeanRegistrationCodeFragmentsCustomizer(codeFragments ->
|
||||
|
@ -76,7 +73,7 @@ class ScopedProxyBeanRegistrationAotProcessor
|
|||
@Nullable
|
||||
private String getTargetBeanName(BeanDefinition beanDefinition) {
|
||||
Object value = beanDefinition.getPropertyValues().get("targetBeanName");
|
||||
return (value instanceof String) ? (String) value : null;
|
||||
return (value instanceof String ? (String) value : null);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
@ -90,23 +87,18 @@ class ScopedProxyBeanRegistrationAotProcessor
|
|||
}
|
||||
|
||||
|
||||
private static class ScopedProxyBeanRegistrationCodeFragments
|
||||
extends BeanRegistrationCodeFragments {
|
||||
private static class ScopedProxyBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments {
|
||||
|
||||
private static final String REGISTERED_BEAN_PARAMETER_NAME = "registeredBean";
|
||||
|
||||
|
||||
private final RegisteredBean registeredBean;
|
||||
|
||||
private final String targetBeanName;
|
||||
|
||||
private final BeanDefinition targetBeanDefinition;
|
||||
|
||||
|
||||
ScopedProxyBeanRegistrationCodeFragments(
|
||||
BeanRegistrationCodeFragments codeGenerator,
|
||||
RegisteredBean registeredBean, String targetBeanName,
|
||||
BeanDefinition targetBeanDefinition) {
|
||||
ScopedProxyBeanRegistrationCodeFragments(BeanRegistrationCodeFragments codeGenerator,
|
||||
RegisteredBean registeredBean, String targetBeanName, BeanDefinition targetBeanDefinition) {
|
||||
|
||||
super(codeGenerator);
|
||||
this.registeredBean = registeredBean;
|
||||
|
@ -114,17 +106,14 @@ class ScopedProxyBeanRegistrationAotProcessor
|
|||
this.targetBeanDefinition = targetBeanDefinition;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Class<?> getTarget(RegisteredBean registeredBean,
|
||||
Executable constructorOrFactoryMethod) {
|
||||
public Class<?> getTarget(RegisteredBean registeredBean, Executable constructorOrFactoryMethod) {
|
||||
return this.targetBeanDefinition.getResolvableType().toClass();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CodeBlock generateNewBeanDefinitionCode(
|
||||
GenerationContext generationContext, ResolvableType beanType,
|
||||
BeanRegistrationCode beanRegistrationCode) {
|
||||
public CodeBlock generateNewBeanDefinitionCode(GenerationContext generationContext,
|
||||
ResolvableType beanType, BeanRegistrationCode beanRegistrationCode) {
|
||||
|
||||
return super.generateNewBeanDefinitionCode(generationContext,
|
||||
this.targetBeanDefinition.getResolvableType(), beanRegistrationCode);
|
||||
|
|
|
@ -180,8 +180,8 @@ public class InitDestroyAnnotationBeanPostProcessor implements DestructionAwareB
|
|||
|
||||
private String[] safeMerge(@Nullable String[] existingNames, Collection<LifecycleElement> detectedElements) {
|
||||
Stream<String> detectedNames = detectedElements.stream().map(LifecycleElement::getIdentifier);
|
||||
Stream<String> mergedNames = (existingNames != null
|
||||
? Stream.concat(Stream.of(existingNames), detectedNames) : detectedNames);
|
||||
Stream<String> mergedNames = (existingNames != null ?
|
||||
Stream.concat(Stream.of(existingNames), detectedNames) : detectedNames);
|
||||
return mergedNames.distinct().toArray(String[]::new);
|
||||
}
|
||||
|
||||
|
|
|
@ -55,7 +55,6 @@ public interface BeanFactoryInitializationAotProcessor {
|
|||
* @return a {@link BeanFactoryInitializationAotContribution} or {@code null}
|
||||
*/
|
||||
@Nullable
|
||||
BeanFactoryInitializationAotContribution processAheadOfTime(
|
||||
ConfigurableListableBeanFactory beanFactory);
|
||||
BeanFactoryInitializationAotContribution processAheadOfTime(ConfigurableListableBeanFactory beanFactory);
|
||||
|
||||
}
|
||||
|
|
|
@ -103,9 +103,8 @@ public abstract class BeanRegistrationCodeFragments {
|
|||
* @return the generated code
|
||||
*/
|
||||
public CodeBlock generateSetBeanDefinitionPropertiesCode(
|
||||
GenerationContext generationContext,
|
||||
BeanRegistrationCode beanRegistrationCode, RootBeanDefinition beanDefinition,
|
||||
Predicate<String> attributeFilter) {
|
||||
GenerationContext generationContext, BeanRegistrationCode beanRegistrationCode,
|
||||
RootBeanDefinition beanDefinition, Predicate<String> attributeFilter) {
|
||||
|
||||
return this.codeFragments.generateSetBeanDefinitionPropertiesCode(
|
||||
generationContext, beanRegistrationCode, beanDefinition, attributeFilter);
|
||||
|
@ -122,9 +121,8 @@ public abstract class BeanRegistrationCodeFragments {
|
|||
* @see #generateInstanceSupplierCode
|
||||
*/
|
||||
public CodeBlock generateSetBeanInstanceSupplierCode(
|
||||
GenerationContext generationContext,
|
||||
BeanRegistrationCode beanRegistrationCode, CodeBlock instanceSupplierCode,
|
||||
List<MethodReference> postProcessors) {
|
||||
GenerationContext generationContext, BeanRegistrationCode beanRegistrationCode,
|
||||
CodeBlock instanceSupplierCode, List<MethodReference> postProcessors) {
|
||||
|
||||
return this.codeFragments.generateSetBeanInstanceSupplierCode(generationContext,
|
||||
beanRegistrationCode, instanceSupplierCode, postProcessors);
|
||||
|
@ -140,13 +138,12 @@ public abstract class BeanRegistrationCodeFragments {
|
|||
* than always needing an {@link InstanceSupplier}
|
||||
* @return the generated code
|
||||
*/
|
||||
public CodeBlock generateInstanceSupplierCode(GenerationContext generationContext,
|
||||
BeanRegistrationCode beanRegistrationCode,
|
||||
public CodeBlock generateInstanceSupplierCode(
|
||||
GenerationContext generationContext, BeanRegistrationCode beanRegistrationCode,
|
||||
Executable constructorOrFactoryMethod, boolean allowDirectSupplierShortcut) {
|
||||
|
||||
return this.codeFragments.generateInstanceSupplierCode(generationContext,
|
||||
beanRegistrationCode, constructorOrFactoryMethod,
|
||||
allowDirectSupplierShortcut);
|
||||
beanRegistrationCode, constructorOrFactoryMethod, allowDirectSupplierShortcut);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -155,11 +152,10 @@ public abstract class BeanRegistrationCodeFragments {
|
|||
* @param beanRegistrationCode the bean registration code
|
||||
* @return the generated code
|
||||
*/
|
||||
public CodeBlock generateReturnCode(GenerationContext generationContext,
|
||||
BeanRegistrationCode beanRegistrationCode) {
|
||||
public CodeBlock generateReturnCode(
|
||||
GenerationContext generationContext, BeanRegistrationCode beanRegistrationCode) {
|
||||
|
||||
return this.codeFragments.generateReturnCode(generationContext,
|
||||
beanRegistrationCode);
|
||||
return this.codeFragments.generateReturnCode(generationContext, beanRegistrationCode);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -32,9 +32,7 @@ import org.springframework.beans.factory.support.RegisteredBean;
|
|||
class BeanRegistrationsAotProcessor implements BeanFactoryInitializationAotProcessor {
|
||||
|
||||
@Override
|
||||
public BeanRegistrationsAotContribution processAheadOfTime(
|
||||
ConfigurableListableBeanFactory beanFactory) {
|
||||
|
||||
public BeanRegistrationsAotContribution processAheadOfTime(ConfigurableListableBeanFactory beanFactory) {
|
||||
BeanDefinitionMethodGeneratorFactory beanDefinitionMethodGeneratorFactory =
|
||||
new BeanDefinitionMethodGeneratorFactory(beanFactory);
|
||||
Map<String, BeanDefinitionMethodGenerator> registrations = new LinkedHashMap<>();
|
||||
|
|
|
@ -815,13 +815,13 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
|||
}
|
||||
|
||||
BeanFactory parent = getParentBeanFactory();
|
||||
if (parent instanceof DefaultListableBeanFactory dlfb) {
|
||||
if (parent instanceof DefaultListableBeanFactory dlbf) {
|
||||
// No bean definition found in this factory -> delegate to parent.
|
||||
return dlfb.isAutowireCandidate(beanName, descriptor, resolver);
|
||||
return dlbf.isAutowireCandidate(beanName, descriptor, resolver);
|
||||
}
|
||||
else if (parent instanceof ConfigurableListableBeanFactory clfb) {
|
||||
else if (parent instanceof ConfigurableListableBeanFactory clbf) {
|
||||
// If no DefaultListableBeanFactory, can't pass the resolver along.
|
||||
return clfb.isAutowireCandidate(beanName, descriptor);
|
||||
return clbf.isAutowireCandidate(beanName, descriptor);
|
||||
}
|
||||
else {
|
||||
return true;
|
||||
|
|
|
@ -320,7 +320,7 @@ public class RootBeanDefinition extends AbstractBeanDefinition {
|
|||
* Specify a generics-containing target type of this bean definition, if known in advance.
|
||||
* @since 4.3.3
|
||||
*/
|
||||
public void setTargetType(ResolvableType targetType) {
|
||||
public void setTargetType(@Nullable ResolvableType targetType) {
|
||||
this.targetType = targetType;
|
||||
}
|
||||
|
||||
|
@ -432,8 +432,8 @@ public class RootBeanDefinition extends AbstractBeanDefinition {
|
|||
@Override
|
||||
public void setInstanceSupplier(@Nullable Supplier<?> instanceSupplier) {
|
||||
super.setInstanceSupplier(instanceSupplier);
|
||||
Method factoryMethod = (instanceSupplier instanceof InstanceSupplier<?>)
|
||||
? ((InstanceSupplier<?>) instanceSupplier).getFactoryMethod() : null;
|
||||
Method factoryMethod = (instanceSupplier instanceof InstanceSupplier<?> ?
|
||||
((InstanceSupplier<?>) instanceSupplier).getFactoryMethod() : null);
|
||||
if (factoryMethod != null) {
|
||||
setResolvedFactoryMethod(factoryMethod);
|
||||
}
|
||||
|
|
|
@ -166,6 +166,7 @@ class BeanDefinitionMethodGeneratorFactoryTests {
|
|||
return RegisteredBean.of(beanFactory, "test");
|
||||
}
|
||||
|
||||
|
||||
static class MockBeanRegistrationExcludeFilter implements
|
||||
BeanRegistrationAotProcessor, BeanRegistrationExcludeFilter, Ordered {
|
||||
|
||||
|
@ -182,8 +183,7 @@ class BeanDefinitionMethodGeneratorFactoryTests {
|
|||
}
|
||||
|
||||
@Override
|
||||
public BeanRegistrationAotContribution processAheadOfTime(
|
||||
RegisteredBean registeredBean) {
|
||||
public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -46,16 +46,13 @@ import org.springframework.lang.Nullable;
|
|||
*
|
||||
* @author Brian Clozel
|
||||
*/
|
||||
class RuntimeHintsBeanFactoryInitializationAotProcessor
|
||||
implements BeanFactoryInitializationAotProcessor {
|
||||
class RuntimeHintsBeanFactoryInitializationAotProcessor implements BeanFactoryInitializationAotProcessor {
|
||||
|
||||
private static final Log logger = LogFactory
|
||||
.getLog(RuntimeHintsBeanFactoryInitializationAotProcessor.class);
|
||||
private static final Log logger = LogFactory.getLog(RuntimeHintsBeanFactoryInitializationAotProcessor.class);
|
||||
|
||||
|
||||
@Override
|
||||
public BeanFactoryInitializationAotContribution processAheadOfTime(
|
||||
ConfigurableListableBeanFactory beanFactory) {
|
||||
public BeanFactoryInitializationAotContribution processAheadOfTime(ConfigurableListableBeanFactory beanFactory) {
|
||||
Map<Class<? extends RuntimeHintsRegistrar>, RuntimeHintsRegistrar> registrars = AotServices
|
||||
.factories(beanFactory.getBeanClassLoader()).load(RuntimeHintsRegistrar.class).stream()
|
||||
.collect(LinkedHashMap::new, (map, item) -> map.put(item.getClass(), item), Map::putAll);
|
||||
|
|
|
@ -87,8 +87,7 @@ public class CglibProxyTests extends AbstractAopProxyTests implements Serializab
|
|||
AdvisedSupport pc = new AdvisedSupport(ITestBean.class);
|
||||
pc.addAdvice(new NopInterceptor());
|
||||
AopProxy aop = createAopProxy(pc);
|
||||
assertThatExceptionOfType(AopConfigException.class).isThrownBy(
|
||||
aop::getProxy);
|
||||
assertThatExceptionOfType(AopConfigException.class).isThrownBy(aop::getProxy);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -129,11 +129,11 @@ class TestClassScanner {
|
|||
if (logger.isInfoEnabled()) {
|
||||
if (packageNames.length > 0) {
|
||||
logger.info("Scanning for Spring test classes in packages %s in classpath roots %s"
|
||||
.formatted(Arrays.toString(packageNames), this.classpathRoots));
|
||||
.formatted(Arrays.toString(packageNames), this.classpathRoots));
|
||||
}
|
||||
else {
|
||||
logger.info("Scanning for Spring test classes in all packages in classpath roots %s"
|
||||
.formatted(this.classpathRoots));
|
||||
.formatted(this.classpathRoots));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -45,6 +45,7 @@ class TransactionBeanRegistrationAotProcessor implements BeanRegistrationAotProc
|
|||
|
||||
private final static String JAKARTA_TRANSACTIONAL_CLASS_NAME = "jakarta.transaction.Transactional";
|
||||
|
||||
|
||||
@Override
|
||||
public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) {
|
||||
Class<?> beanClass = registeredBean.getBeanClass();
|
||||
|
@ -68,6 +69,7 @@ class TransactionBeanRegistrationAotProcessor implements BeanRegistrationAotProc
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
private static class TransactionBeanRegistrationAotContribution implements BeanRegistrationAotContribution {
|
||||
|
||||
private final Class<?> beanClass;
|
||||
|
@ -84,7 +86,8 @@ class TransactionBeanRegistrationAotProcessor implements BeanRegistrationAotProc
|
|||
return;
|
||||
}
|
||||
for (Class<?> proxyInterface : proxyInterfaces) {
|
||||
runtimeHints.reflection().registerType(proxyInterface, builder -> builder.withMembers(MemberCategory.INVOKE_DECLARED_METHODS));
|
||||
runtimeHints.reflection().registerType(proxyInterface,
|
||||
builder -> builder.withMembers(MemberCategory.INVOKE_DECLARED_METHODS));
|
||||
}
|
||||
runtimeHints.proxies().registerJdkProxy(AopProxyUtils.completeJdkProxyInterfaces(proxyInterfaces));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue