1.首先创建被增强类和增强类 并用注解方式创建对象
AOP项目所需jar包 没有的朋友自取https://pan.baidu.com/s/1wj11GkWhlLYq3nfnJFTYbA
提取码:jdbc
User.java(被增强类)
package AopAnon;
import org.springframework.stereotype.Component;
@Component
public class User {
public void add(){
System.out.println("add.......");
}
}
Userprotect.java(增强类)
package AopAnon;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class Userprotect {
//前置通知 0在被增强代码前执行
@Before(value = "execution(* AopAnon.User.add(..))")
public void before(){
System.out.println("before..........");
}
//最终通知 原代码执行后触发
@After(value = "execution(* AopAnon.User.add(..))")
public void after(){
System.out.println("After..........");
}
//返回通知 代码正常执行完毕后执行
@AfterReturning(value = "execution(* AopAnon.User.add(..))")
public void afterReturning(){
System.out.println("afterReturning..........");
}
//环绕通知 在被增强代码执行前和执行后都会执行一遍
@Around(value = "execution(* AopAnon.User.add(..))")
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("around前..........");
proceedingJoinPoint.proceed();
System.out.println("around后..........");
}
// 异常通知 当被增强代码执行时发生了异常时执行
@AfterThrowing(value = "execution(* AopAnon.User.add(..))")
public void afterThrowing(){
System.out.println("afterThrowing..........");
}
}
**value = "execution(* AopAnon.User.add(..)) //给定要被增强的类和方法 这行语法结构是(修饰符 返回类型 被增强类的包.类名.方法(参数列表 ..代表1或多个参数)) 修饰符可以不写 *代表任意返回类型
bean2.xml (配置文件)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
"
>
<!--开启组件扫描-->
<context:component-scan base-package="AopAnon"></context:component-scan>
<!-- 扫描Aspectj注释作为代理对象-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
TestDemo.java (测试类)
package AopAnon;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Testdemo {
@Test
public void testdemo1(){
ApplicationContext context=new ClassPathXmlApplicationContext("bean2.xml");
User user = context.getBean("user", User.class);
user.add();
}
}
所需资源
执行结果
被增强类出现错误时