Polishing

This commit is contained in:
Juergen Hoeller 2022-08-10 23:30:27 +02:00
parent b31a15851e
commit 38c9e7f629
12 changed files with 47 additions and 66 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -55,7 +55,6 @@ public interface BeanFactoryInitializationAotProcessor {
* @return a {@link BeanFactoryInitializationAotContribution} or {@code null}
*/
@Nullable
BeanFactoryInitializationAotContribution processAheadOfTime(
ConfigurableListableBeanFactory beanFactory);
BeanFactoryInitializationAotContribution processAheadOfTime(ConfigurableListableBeanFactory beanFactory);
}

View File

@ -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);
}
}

View File

@ -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<>();

View File

@ -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;

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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

View File

@ -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));
}
}

View File

@ -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));
}