1、代理类接口Person.java
1 package com.xiaostudy;
2
3 /**
4 * @desc 被代理类接口
5 *
6 * @author xiaostudy
7 *
8 */
9 public interface Person {
10
11 public void add();
12 public void update();
13 public void delete();
14 }
2、代理类PersonImple.java
1 package com.xiaostudy;
2
3 import org.springframework.stereotype.Component;
4
5 /**
6 * @desc 被代理类
7 *
8 * @author xiaostudy
9 *
10 */
11 @Component("person")//类注解
12 public class PersonImple implements Person {
13
14 /**
15 * @desc 实现接口方法
16 */
17 public void add() {
18 System.out.println("add().....");
19 }
20
21 @Override
22 public void update() {
23 System.out.println("update().....");
24 // int i = 1/0;
25 }
26
27 @Override
28 public void delete() {
29 System.out.println("delete().....");
30 }
31
32 }
3、通知类MyAspectJ.java
1 package com.xiaostudy;
2
3 import org.aspectj.lang.JoinPoint;
4 import org.aspectj.lang.ProceedingJoinPoint;
5 import org.aspectj.lang.annotation.After;
6 import org.aspectj.lang.annotation.AfterReturning;
7 import org.aspectj.lang.annotation.AfterThrowing;
8 import org.aspectj.lang.annotation.Around;
9 import org.aspectj.lang.annotation.Aspect;
10 import org.aspectj.lang.annotation.Before;
11 import org.aspectj.lang.annotation.Pointcut;
12 import org.springframework.stereotype.Component;
13
14 /**
15 * @desc 通知类
16 *
17 * @author xiaostudy
18 *
19 */
20 @Component//类注解
21 @Aspect//AspectJ注解
22 public class MyAspectJ {
23
24 //声明公共切入点
25 @Pointcut("execution(* com.xiaostudy.PersonImple.*(..))")
26 public void myPointcut() {
27
28 }
29
30 //前置通知注解,只有一个参数时,value可以省略不写
31 @Before("execution(* com.xiaostudy.PersonImple.*(..))")
32 public void myBefort(JoinPoint joinPoint) {
33 System.out.println("前置通知>>>>>>>>>joinPoint: " + joinPoint.getSignature().getName());
34 }
35
36 //后置通知注解,当参数大于1时,value必须写
37 @AfterReturning(value="myPointcut()", returning="ret")
38 public void myAfterReturning(JoinPoint joinPoint, Object ret) {
39 System.out.println("后置通知>>>>>>>>>joinPoint: " + joinPoint.getSignature().getName()
40 + ", ret: " + ret);
41 }
42
43 //环绕通知注解
44 @Around("myPointcut()")
45 public Object myAround(ProceedingJoinPoint joinPoint) throws Throwable {
46 System.out.println("环绕通知====前>>>>>>>>>>>");
47 Object obj = joinPoint.proceed();
48 System.out.println("环绕通知====后<<<<<<<<<<<");
49 return obj;
50 }
51
52 //异常通知注解
53 @AfterThrowing(value="myPointcut()", throwing="e")
54 public void myThrowint(JoinPoint joinPoint, Throwable e) {
55 System.out.println("异常通知>>>>>>>>>joinPoint: " + joinPoint.getSignature().getName()
56 + ", e: " + e.getMessage());
57 System.exit(0);
58 }
59
60 //最终通知注解
61 @After("myPointcut()")
62 public void myAfter(JoinPoint joinPoint) {
63 System.out.println("最终通知>>>>>>>>>joinPoint: " + joinPoint.getSignature().getName());
64 }
65 }
4、spring配置文件applicationContext.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:aop="http://www.springframework.org/schema/aop"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans
7 http://www.springframework.org/schema/beans/spring-beans.xsd
8 http://www.springframework.org/schema/aop
9 http://www.springframework.org/schema/aop/spring-aop.xsd
10 http://www.springframework.org/schema/context
11 http://www.springframework.org/schema/context/spring-context.xsd">
12 <!-- 扫描注解类 -->
13 <context:component-scan base-package="com.xiaostudy"></context:component-scan>
14 <!-- 确定 AOP注解生效 -->
15 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
16 </beans>
5、测试类Test.java
1 package com.xiaostudy;
2
3 import org.springframework.context.ApplicationContext;
4 import org.springframework.context.support.ClassPathXmlApplicationContext;
5
6 /**
7 * @desc 测试类
8 *
9 * @author xiaostudy
10 *
11 */
12 public class Test {
13
14 public static void main(String[] args) {
15 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
16 Person person = ac.getBean("person", Person.class);
17 person.add();
18 person.update();
19 person.delete();
20 }
21
22 }