自定义注解进行aop拦截

首先自定义一个注解,将注解贴在需要拦截的方法上

1
2
3
4
5
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface aop {
String name();
}

配置AOP

1
2
3
4
5
6
7
8
//使用javaconfig配置
@Configuration
// 使用CGLIB代理
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ComponentScan("com.ssm.Aop")
public class AopConfig {

}

编写切面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Component
@Aspect
public class AopTest {

// 自定义注解所在位置
@Pointcut("@annotation(com.ssm.controller.aop)")
public void print() {
}

@Around("print()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {

MethodSignature signature = (MethodSignature) pjp.getSignature();

Method method = signature.getMethod();

aop aop = method.getAnnotation(aop.class);
String s = aop.name();
System.out.println(s);

Object o = pjp.proceed();
System.out.println(pjp.getSignature().toShortString());
Object[] args = pjp.getArgs();


System.out.println("获取被代理的对象" + pjp.getTarget());
System.out.println("获取代理的对象" + pjp.getThis());

return o;
}
赏个🍗吧
0%