Merge branch '6.0.x'
This commit is contained in:
@@ -286,7 +286,8 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
|
||||
String beanName = registeredBean.getBeanName();
|
||||
RootBeanDefinition beanDefinition = registeredBean.getMergedBeanDefinition();
|
||||
InjectionMetadata metadata = findInjectionMetadata(beanName, beanClass, beanDefinition);
|
||||
Collection<AutowiredElement> autowiredElements = getAutowiredElements(metadata);
|
||||
Collection<AutowiredElement> autowiredElements = getAutowiredElements(metadata,
|
||||
registeredBean.getMergedBeanDefinition().getPropertyValues());
|
||||
if (!ObjectUtils.isEmpty(autowiredElements)) {
|
||||
return new AotContribution(beanClass, autowiredElements, getAutowireCandidateResolver());
|
||||
}
|
||||
@@ -295,8 +296,8 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
|
||||
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
private Collection<AutowiredElement> getAutowiredElements(InjectionMetadata metadata) {
|
||||
return (Collection) metadata.getInjectedElements();
|
||||
private Collection<AutowiredElement> getAutowiredElements(InjectionMetadata metadata, PropertyValues propertyValues) {
|
||||
return (Collection) metadata.getInjectedElements(propertyValues);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -752,7 +753,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
|
||||
|
||||
@Override
|
||||
protected void inject(Object bean, @Nullable String beanName, @Nullable PropertyValues pvs) throws Throwable {
|
||||
if (checkPropertySkipping(pvs)) {
|
||||
if (!shouldInject(pvs)) {
|
||||
return;
|
||||
}
|
||||
Method method = (Method) this.member;
|
||||
|
||||
@@ -97,6 +97,19 @@ public class InjectionMetadata {
|
||||
return Collections.unmodifiableCollection(this.injectedElements);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the {@link InjectedElement elements} to inject based on the
|
||||
* specified {@link PropertyValues}. If a property is already defined
|
||||
* for an {@link InjectedElement}, it is excluded.
|
||||
* @param pvs the property values to consider
|
||||
* @return the elements to inject
|
||||
* @since 6.0.10
|
||||
*/
|
||||
public Collection<InjectedElement> getInjectedElements(@Nullable PropertyValues pvs) {
|
||||
return this.injectedElements.stream()
|
||||
.filter(candidate -> candidate.shouldInject(pvs)).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether this metadata instance needs to be refreshed.
|
||||
* @param clazz the current target class
|
||||
@@ -230,21 +243,28 @@ public class InjectionMetadata {
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean shouldInject(@Nullable PropertyValues pvs) {
|
||||
if (this.isField) {
|
||||
return true;
|
||||
}
|
||||
return !checkPropertySkipping(pvs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Either this or {@link #getResourceToInject} needs to be overridden.
|
||||
*/
|
||||
protected void inject(Object target, @Nullable String requestingBeanName, @Nullable PropertyValues pvs)
|
||||
throws Throwable {
|
||||
|
||||
if (!shouldInject(pvs)) {
|
||||
return;
|
||||
}
|
||||
if (this.isField) {
|
||||
Field field = (Field) this.member;
|
||||
ReflectionUtils.makeAccessible(field);
|
||||
field.set(target, getResourceToInject(target, requestingBeanName));
|
||||
}
|
||||
else {
|
||||
if (checkPropertySkipping(pvs)) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
Method method = (Method) this.member;
|
||||
ReflectionUtils.makeAccessible(method);
|
||||
|
||||
Reference in New Issue
Block a user