diff --git a/spring-core/proxy/build.gradle b/spring-core/proxy/build.gradle index 003353a3..d70ece54 100644 --- a/spring-core/proxy/build.gradle +++ b/spring-core/proxy/build.gradle @@ -20,6 +20,7 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-aop' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/spring-core/proxy/src/main/java/com/example/proxy/ProxyApplication.java b/spring-core/proxy/src/main/java/com/example/proxy/ProxyApplication.java index 950f6d98..f6ec429f 100644 --- a/spring-core/proxy/src/main/java/com/example/proxy/ProxyApplication.java +++ b/spring-core/proxy/src/main/java/com/example/proxy/ProxyApplication.java @@ -9,6 +9,7 @@ import com.example.proxy.config.v2_dynamicproxy.DynamicProxyFilterConfig; import com.example.proxy.config.v3_proxyfactory.ProxyFactoryConfigV1; import com.example.proxy.config.v3_proxyfactory.ProxyFactoryConfigV2; import com.example.proxy.config.v4_postprocessor.BeanPostProcessorConfig; +import com.example.proxy.config.v5_autoproxy.AutoProxyConfig; import com.example.proxy.trace.logtrace.LogTrace; import com.example.proxy.trace.logtrace.ThreadLocalLogTrace; import org.springframework.boot.SpringApplication; @@ -23,7 +24,8 @@ import org.springframework.context.annotation.Import; //@Import(DynamicProxyFilterConfig.class) //@Import(ProxyFactoryConfigV1.class) //@Import(ProxyFactoryConfigV2.class) -@Import(BeanPostProcessorConfig.class) +//@Import(BeanPostProcessorConfig.class) +@Import(AutoProxyConfig.class) @SpringBootApplication(scanBasePackages = "com.example.proxy.app") public class ProxyApplication { diff --git a/spring-core/proxy/src/main/java/com/example/proxy/config/v5_autoproxy/AutoProxyConfig.java b/spring-core/proxy/src/main/java/com/example/proxy/config/v5_autoproxy/AutoProxyConfig.java new file mode 100644 index 00000000..ba59f2a7 --- /dev/null +++ b/spring-core/proxy/src/main/java/com/example/proxy/config/v5_autoproxy/AutoProxyConfig.java @@ -0,0 +1,45 @@ +package com.example.proxy.config.v5_autoproxy; + +import com.example.proxy.config.AppV1Config; +import com.example.proxy.config.AppV2Config; +import com.example.proxy.config.v3_proxyfactory.advice.LogTraceAdvice; +import com.example.proxy.trace.logtrace.LogTrace; +import org.springframework.aop.Advisor; +import org.springframework.aop.aspectj.AspectJExpressionPointcut; +import org.springframework.aop.support.DefaultPointcutAdvisor; +import org.springframework.aop.support.NameMatchMethodPointcut; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@Import({AppV1Config.class, AppV2Config.class}) +public class AutoProxyConfig { + +// @Bean + public Advisor advisor1(LogTrace logTrace) { + NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut(); + pointcut.setMappedNames("request*", "order*", "save*"); + + LogTraceAdvice advice = new LogTraceAdvice(logTrace); + return new DefaultPointcutAdvisor(pointcut, advice); + } + +// @Bean + public Advisor advisor2(LogTrace logTrace) { + AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); + pointcut.setExpression("execution(* com.example.proxy.app..*(..))"); + + LogTraceAdvice advice = new LogTraceAdvice(logTrace); + return new DefaultPointcutAdvisor(pointcut, advice); + } + + @Bean + public Advisor advisor3(LogTrace logTrace) { + AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); + pointcut.setExpression("execution(* com.example.proxy.app..*(..)) && !execution(* com.example.proxy.app..noLog(..))"); + + LogTraceAdvice advice = new LogTraceAdvice(logTrace); + return new DefaultPointcutAdvisor(pointcut, advice); + } +}