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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/contexthttp://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 定义正常返回的通知
切面类:
java">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以及之后,切点类必须要实现接口
希望对你有所帮助!