spring core proxy : log trace - spring auto proxy creator

This commit is contained in:
haerong22
2021-11-19 21:57:22 +09:00
parent b0312fc13f
commit 21e5b69629
3 changed files with 49 additions and 1 deletions

View File

@@ -20,6 +20,7 @@ repositories {
dependencies { dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-aop'
compileOnly 'org.projectlombok:lombok' compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-starter-test'

View File

@@ -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.ProxyFactoryConfigV1;
import com.example.proxy.config.v3_proxyfactory.ProxyFactoryConfigV2; import com.example.proxy.config.v3_proxyfactory.ProxyFactoryConfigV2;
import com.example.proxy.config.v4_postprocessor.BeanPostProcessorConfig; 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.LogTrace;
import com.example.proxy.trace.logtrace.ThreadLocalLogTrace; import com.example.proxy.trace.logtrace.ThreadLocalLogTrace;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
@@ -23,7 +24,8 @@ import org.springframework.context.annotation.Import;
//@Import(DynamicProxyFilterConfig.class) //@Import(DynamicProxyFilterConfig.class)
//@Import(ProxyFactoryConfigV1.class) //@Import(ProxyFactoryConfigV1.class)
//@Import(ProxyFactoryConfigV2.class) //@Import(ProxyFactoryConfigV2.class)
@Import(BeanPostProcessorConfig.class) //@Import(BeanPostProcessorConfig.class)
@Import(AutoProxyConfig.class)
@SpringBootApplication(scanBasePackages = "com.example.proxy.app") @SpringBootApplication(scanBasePackages = "com.example.proxy.app")
public class ProxyApplication { public class ProxyApplication {

View File

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