AOP在代码中的实现方式有三种:
1.采用spring的原生API进行实现
先定义通知类:
after通知类型的通知类实现AfterRuturnAdvice接口,实现内部的方法,在方法中加入你要通知的操作
before通知类型的通知类实现MethodBeforeAdvice接口,实现内部的方法,在方法中加入你要通知的操作
还有其他的通知类型就不一一列举了,之后便是在application配置文件中声明通知类bean、插入类bean,配置切入点、通知
然后,当你运行被切入的类的切入点方法时,前置通知和后置通知都会执行。
2.不定义通知类,因为每一个通知都要创建一个类太麻烦。第二种方法定义切面类,然后在application配置文件中进行配置
先创建一个切面类,再在切面类中创建你要插入的通知方法
如:
然后在配置文件中进行配置
<!-- 目标对象---><bean id="target" class="com.hzd.aop.Method"/> <!-- 切面对象--> <bean id="myAspect" class="com.hzd.aop.Aspect"/> <!-- 配置织入,告诉spring框架 哪些方法需要进行哪些增强(前置、后置),需要引入aop命名空间--> <aop:config> <!-- 声明切面--> <aop:aspect ref="Aspect"> <!-- 抽取切点表达式--> <aop:pointcut id="myPonintcut" expression="execution(public void com.hzd.aop.Method.method())"/> <!-- 切面,切点和通知--> <aop:before method="before" pointcut-ref="myPonintcut"></aop:before> <aop:after-returning method="after" pointcut-ref="myPonintcut"></aop:after-returning> <aop:around method="around" pointcut-ref="myPonintcut"></aop:around> </aop:aspect> </aop:config>
第三种:用注释配置切面类、通知、切入点
@component 注解:将该类声明进入spring容器中
@Aspect:声明是一个切面类bean,而不是普通bean
@before(切面点)修饰方法:表面这是一个前置方法
@After(切面点)声明这是一个后置方法
@Pointcut 声明这是一个切点表达式方法