Spring 支持AOP ,并且可以通过XML配置来实现。
<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"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 定义目标对象 -->
<context:component-scan base-package="com" />
<!-- 定义切面 -->
<bean id="logAspect" class="com.aspect.LogAspect"></bean>
<aop:config>
<aop:aspect ref="logAspect">
<aop:pointcut expression="execution(* com.service.impl.*.*(..))" id="myAspect" />
<aop:before method="beforePrintLog" pointcut-ref="myAspect"></aop:before>
<aop:after method="afterPrintLog" pointcut-ref="myAspect"></aop:after>
<aop:after-throwing method="afterThrowingPrintLog" pointcut-ref="myAspect"></aop:after-throwing>
</aop:aspect>
</aop:config>
</beans>
相关标签介绍:
aop:config 注明开始配置aop ,是配置的开始标签
aop:aspect 配置切面 ref 属性是引用相关切面类Bean的id
aop:point-cut 定义切点 expression 是具体的表达式 id 是切点的标识
aop:before 定义前置通知 method是要执行的方法 pointcut-ref为引用的aop-point-cut 定义的id
aop:after 定义最终通知
aop:around 定义环绕通知
aop:after-throwing 定义返回异常的通知
aop:after-returning 定义正常返回的通知
切面类:
package com.aspect;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
public class LogAspect {
public void beforePrintLog() {
System.out.println("LogAspectbeforePrintLog");
}
public void afterReturnPrintLog() {
System.out.println("LogAspectafterReturnPrintLog");
}
public void afterThrowingPrintLog() {
System.out.println("LogAspectafterThrowingPrintLog");
}
public void afterPrintLog() {
System.out.println("LogAspectafterPrintLog");
}
public void aroundPrintLog() {
System.out.println("aroundPrintLog");
}
}
切点类必须是实现某个接口才行,SpringAOP代理实现机制包含Spring GGLIB 方式和JDK动态代理方式,默认的是JDK动态代理的方式,但是这种实现方式切点类我们的必须要实现某个接口 jdk9以及之后,切点类必须要实现接口
希望对你有所帮助!