1、导包
<!-- AOP -->
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
##2、 切面
package com.zhiyyou100.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
//切面类 切面里面的方法事通知
public class Aspect {
//1.前置通知 -目标方法执行之前的 方法 目标方法就是 目标接口中的方法——add方法
public void before() {
System.out.println("before");
}
//后置方法——有异常的时候则就不会执行
public void after_returning() {
System.out.println("after_returning");
}
//异常通知——有异常的时候执行的通知
public void exception() {
System.out.println("exception");
}
//最终通知——一定会执行
public void after() {
}
//环绕通知
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
//目标方法执行之前的动作
System.out.println("目标方法执行之前的");
//目标方法的执行,可以让目标方法执行,也可以让它不执行
if (1==1) {
joinPoint.proceed(); //这句话表示可以执行
}
//目标方法执行之后的动态
System.out.println("目标方法执行之后的动作");
}
}
3、测试
package com.zhiyou100.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.zhiyou100.service.UserService;
public class AOPtest {
public static void main(String[] args) {
ApplicationContext context=
new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService=(UserService) context.getBean("userService");
userService.add();//连接点
}
}
4.总结
动态代理产生的代理对象是目标类的目标接口