Skip to content

Commit fbf925e

Browse files
author
吴某人
committed
feat: Aop
1 parent 4efb964 commit fbf925e

File tree

3 files changed

+81
-5
lines changed

3 files changed

+81
-5
lines changed

spring-test/src/main/java/org/springframework/wx/AnnoAC.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.springframework.wx;
22

3+
import org.springframework.cglib.core.DebuggingClassWriter;
34
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
45
import org.springframework.expression.Expression;
56
import org.springframework.expression.spel.standard.SpelExpressionParser;
67
import org.springframework.expression.spel.support.StandardEvaluationContext;
8+
import org.springframework.wx.aop.RandomService;
79
import org.springframework.wx.beans4test.circularReference.A;
810
import org.springframework.wx.beans4test.lazy.NotALazyBean;
911
import org.springframework.wx.beans4test.methodOveride.Student;
@@ -71,9 +73,14 @@ public static void main(String[] args) {
7173
// AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext("org.springframework.wx.importSelector");
7274
// annotationConfigApplicationContext.getBean("personL");
7375
// 实现懒加载bean
74-
AnnotationConfigApplicationContext context4LazyTest = new AnnotationConfigApplicationContext("org.springframework.wx.beans4test.lazy");
75-
((NotALazyBean)context4LazyTest.getBean("notALazyBean")).getIamALazyBean().getaBeanNeedAName();
76+
// AnnotationConfigApplicationContext context4LazyTest = new AnnotationConfigApplicationContext("org.springframework.wx.beans4test.lazy");
77+
// ((NotALazyBean)context4LazyTest.getBean("notALazyBean")).getIamALazyBean().getaBeanNeedAName();
7678

79+
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY,"/home/wx/Documents/personal_java/spring-framework/spring-test/src/main/java/org/springframework/wx/aop");
80+
AnnotationConfigApplicationContext applicationContext =
81+
new AnnotationConfigApplicationContext("org.springframework.wx.aop");
82+
RandomService bean = applicationContext.getBean(RandomService.class);
83+
bean.doSomething();
7784

7885
}
7986

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package org.springframework.wx.aop;
22

3+
import org.springframework.stereotype.Service;
4+
35
/**
46
* @author wuxin
57
* @date 2022/10/08 09:50:58
68
*/
9+
@Service
710
public class RandomService {
811

912
public void doSomething(){
1013
System.out.println("..................do business logic.....................");
1114
}
1215

13-
public void doSomethingElse(){
14-
System.out.println("..................do something else logic.....................");
15-
}
1616

1717
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package org.springframework.wx.aop.intercept;
2+
3+
import org.aopalliance.intercept.MethodInterceptor;
4+
import org.aopalliance.intercept.MethodInvocation;
5+
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
import org.springframework.aop.AfterReturningAdvice;
8+
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
9+
import org.springframework.aop.support.DefaultPointcutAdvisor;
10+
import org.springframework.context.annotation.Bean;
11+
import org.springframework.context.annotation.Configuration;
12+
import org.springframework.context.annotation.EnableAspectJAutoProxy;
13+
14+
import java.lang.reflect.Method;
15+
16+
@Configuration
17+
@EnableAspectJAutoProxy(proxyTargetClass = true)
18+
public class AopConfig {
19+
20+
@Bean
21+
public AspectJExpressionPointcut myAspectJExpressionPointcut() {
22+
AspectJExpressionPointcut aspectJExpressionPointcut = new AspectJExpressionPointcut();
23+
aspectJExpressionPointcut.setExpression("execution(* org.springframework.wx.aop.RandomService.*(..))");
24+
return aspectJExpressionPointcut;
25+
}
26+
27+
@Bean
28+
public DefaultPointcutAdvisor defaultPointcutAdvisor(AspectJExpressionPointcut myAspectJExpressionPointcut) {
29+
TracingInterceptor tracingInterceptor = new TracingInterceptor();
30+
DefaultPointcutAdvisor defaultPointcutAdvisor = new DefaultPointcutAdvisor();
31+
defaultPointcutAdvisor.setPointcut(myAspectJExpressionPointcut);
32+
defaultPointcutAdvisor.setAdvice(tracingInterceptor);
33+
return defaultPointcutAdvisor;
34+
}
35+
36+
@Bean
37+
public DefaultPointcutAdvisor defaultAfterPointcutAdvisor(AspectJExpressionPointcut myAspectJExpressionPointcut) {
38+
AfterInterceptor tracingInterceptor = new AfterInterceptor();
39+
DefaultPointcutAdvisor defaultPointcutAdvisor = new DefaultPointcutAdvisor();
40+
defaultPointcutAdvisor.setPointcut(myAspectJExpressionPointcut);
41+
defaultPointcutAdvisor.setAdvice(tracingInterceptor);
42+
return defaultPointcutAdvisor;
43+
}
44+
45+
public static class TracingInterceptor implements MethodInterceptor {
46+
47+
@Nullable
48+
@Override
49+
public Object invoke(@NotNull MethodInvocation invocation) throws Throwable {
50+
Method method = invocation.getMethod();
51+
String name = method.getName();
52+
System.out.println(name + "方法开始执行!");
53+
Object proceed = invocation.proceed();
54+
System.out.println(name + "方法执行结束!");
55+
return proceed;
56+
}
57+
}
58+
59+
60+
61+
public static class AfterInterceptor implements AfterReturningAdvice {
62+
@Override
63+
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
64+
System.out.println("这是一个后置切面");
65+
}
66+
}
67+
68+
69+
}

0 commit comments

Comments
 (0)