连接点:类中可以呗增强的方法。
切入点:类中实际被增强的方法。
增强:前置增强、后置增强、环绕增强、最终增强、异常增强。
切面:增强 作用到 切入点 的过程。
1.导包
2.创建目标类和增强类
MyTarget.java
package zh.spring.entity;
// 目标类
public class MyTarget {
public void fun(){
System.out.println("fun...");
}
}
再增强类上面添加@Aspect,里面的方法上面添加 增强类型 和 切入点表达式 。
MyAdvice.java
package zh.spring.entity;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
// 增强类
@Aspect
public class MyAdvice {
// 切入点写法:execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
// 简单写法如下:
// (1)execution(* zh.spring.entity.MyTarget.fun(..))
// (2)execution(* zh.spring.entity.MyTarget.*(..))
// (3)execution(* *.*(..))
@Before(value="execution(* zh.spring.entity.MyTarget.fun(..))")
public void before(){
System.out.println("before...");
}
@After(value="execution(* zh.spring.entity.MyTarget.fun(..))")
public void after(){
System.out.println("after...");
}
@Around(value="execution(* zh.spring.entity.MyTarget.fun(..))")
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
System.out.println("around1...");
proceedingJoinPoint.proceed();// 调用目标类被增强的方法(切入点)
System.out.println("around2...");
}
}
3.在src下创建bean.xml,引入约束
bean.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: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/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="myAdvice" class="zh.spring.entity.MyAdvice" scope="singleton"></bean>
<bean id="myTarget" class="zh.spring.entity.MyTarget" scope="singleton"></bean>
<!-- 开启AOP注解 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
4.测试
AOPTest.java
package zh.spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import zh.spring.entity.MyTarget;
public class AOPTest {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
MyTarget myTarget = (MyTarget) applicationContext.getBean("myTarget");
myTarget.fun();
}
}