|
|
|
|
@ -28,6 +28,10 @@ import org.junit.jupiter.api.Test
@@ -28,6 +28,10 @@ import org.junit.jupiter.api.Test
|
|
|
|
|
import org.springframework.aop.framework.autoproxy.AspectJAutoProxyInterceptorKotlinIntegrationTests.InterceptorConfig |
|
|
|
|
import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor |
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired |
|
|
|
|
import org.springframework.cache.CacheManager |
|
|
|
|
import org.springframework.cache.annotation.Cacheable |
|
|
|
|
import org.springframework.cache.annotation.EnableCaching |
|
|
|
|
import org.springframework.cache.concurrent.ConcurrentMapCacheManager |
|
|
|
|
import org.springframework.context.annotation.Bean |
|
|
|
|
import org.springframework.context.annotation.Configuration |
|
|
|
|
import org.springframework.context.annotation.EnableAspectJAutoProxy |
|
|
|
|
@ -93,9 +97,26 @@ class AspectJAutoProxyInterceptorKotlinIntegrationTests(
@@ -93,9 +97,26 @@ class AspectJAutoProxyInterceptorKotlinIntegrationTests(
|
|
|
|
|
assertThat(reactiveTransactionManager.commits).`as`("transactional applied").isOne() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test // gh-33210 |
|
|
|
|
fun `Aspect and cacheable with suspending function`() { |
|
|
|
|
assertThat(countingAspect.counter).isZero() |
|
|
|
|
val value = "Hello!" |
|
|
|
|
runBlocking { |
|
|
|
|
assertThat(echo.suspendingCacheableEcho(value)).isEqualTo("$value 0") |
|
|
|
|
assertThat(echo.suspendingCacheableEcho(value)).isEqualTo("$value 0") |
|
|
|
|
assertThat(echo.suspendingCacheableEcho(value)).isEqualTo("$value 0") |
|
|
|
|
assertThat(countingAspect.counter).`as`("aspect applied once").isOne() |
|
|
|
|
|
|
|
|
|
assertThat(echo.suspendingCacheableEcho("$value bis")).isEqualTo("$value bis 1") |
|
|
|
|
assertThat(echo.suspendingCacheableEcho("$value bis")).isEqualTo("$value bis 1") |
|
|
|
|
} |
|
|
|
|
assertThat(countingAspect.counter).`as`("aspect applied once per key").isEqualTo(2) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
@EnableAspectJAutoProxy |
|
|
|
|
@EnableTransactionManagement |
|
|
|
|
@EnableCaching |
|
|
|
|
open class InterceptorConfig { |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
@ -112,6 +133,11 @@ class AspectJAutoProxyInterceptorKotlinIntegrationTests(
@@ -112,6 +133,11 @@ class AspectJAutoProxyInterceptorKotlinIntegrationTests(
|
|
|
|
|
return ReactiveCallCountingTransactionManager() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
open fun cacheManager(): CacheManager { |
|
|
|
|
return ConcurrentMapCacheManager() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
open fun echo(): Echo { |
|
|
|
|
return Echo() |
|
|
|
|
@ -155,7 +181,7 @@ class AspectJAutoProxyInterceptorKotlinIntegrationTests(
@@ -155,7 +181,7 @@ class AspectJAutoProxyInterceptorKotlinIntegrationTests(
|
|
|
|
|
fun logging(joinPoint: ProceedingJoinPoint): Any { |
|
|
|
|
return (joinPoint.proceed(joinPoint.args) as Mono<*>).doOnTerminate { |
|
|
|
|
counter++ |
|
|
|
|
} |
|
|
|
|
}.checkpoint("CountingAspect") |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -177,6 +203,15 @@ class AspectJAutoProxyInterceptorKotlinIntegrationTests(
@@ -177,6 +203,15 @@ class AspectJAutoProxyInterceptorKotlinIntegrationTests(
|
|
|
|
|
return value |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
open var cacheCounter: Int = 0 |
|
|
|
|
|
|
|
|
|
@Counting |
|
|
|
|
@Cacheable("something") |
|
|
|
|
open suspend fun suspendingCacheableEcho(value: String): String { |
|
|
|
|
delay(1) |
|
|
|
|
return "$value ${cacheCounter++}" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|