Scheduled/JmsAnnotationBeanPostProcessor properly deals with nested proxies

Issue: SPR-16196
This commit is contained in:
Juergen Hoeller
2018-01-19 19:13:38 +01:00
parent c1bc74c83f
commit a73d9bbed5
3 changed files with 25 additions and 6 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -33,6 +33,7 @@ import java.util.TimeZone;
import org.junit.After;
import org.junit.Test;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -179,6 +180,14 @@ public class ScheduledAnnotationBeanPostProcessorTests {
severalFixedRates(context, processorDefinition, targetDefinition);
}
@Test
public void severalFixedRatesAgainstNestedCglibProxy() {
BeanDefinition processorDefinition = new RootBeanDefinition(ScheduledAnnotationBeanPostProcessor.class);
BeanDefinition targetDefinition = new RootBeanDefinition(SeveralFixedRatesWithRepeatedScheduledAnnotationTestBean.class);
targetDefinition.setFactoryMethodName("nestedProxy");
severalFixedRates(context, processorDefinition, targetDefinition);
}
private void severalFixedRates(StaticApplicationContext context,
BeanDefinition processorDefinition, BeanDefinition targetDefinition) {
@@ -486,7 +495,7 @@ public class ScheduledAnnotationBeanPostProcessorTests {
BeanDefinition targetDefinition = new RootBeanDefinition(ExpressionWithCronTestBean.class);
context.registerBeanDefinition("postProcessor", processorDefinition);
context.registerBeanDefinition("target", targetDefinition);
Map<String, String> schedules = new HashMap<String, String>();
Map<String, String> schedules = new HashMap<>();
schedules.put("businessHours", businessHoursCronExpression);
context.getBeanFactory().registerSingleton("schedules", schedules);
context.refresh();
@@ -631,6 +640,14 @@ public class ScheduledAnnotationBeanPostProcessorTests {
@Scheduled(fixedRate = 4000, initialDelay = 2000)
public void fixedRate() {
}
static SeveralFixedRatesWithRepeatedScheduledAnnotationTestBean nestedProxy() {
ProxyFactory pf1 = new ProxyFactory(new SeveralFixedRatesWithRepeatedScheduledAnnotationTestBean());
pf1.setProxyTargetClass(true);
ProxyFactory pf2 = new ProxyFactory(pf1.getProxy());
pf2.setProxyTargetClass(true);
return (SeveralFixedRatesWithRepeatedScheduledAnnotationTestBean) pf2.getProxy();
}
}