AOP_3.Spring AOP的实现与使用

1.注解编程实现

>> 实现类

package com.umikawa.aop; import java.util.List; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import com.umikawa.bean.Person; @Aspect public class MyInterceptor { /** * 第一个* 代表任意的返回类型 * (..) 所有参数 */ @Pointcut ("execution(* com.umikawa.service.impl.PersonServiceBean.*(..))") private void anyMethod(){}; // 声明一个切入点 @Before("anyMethod() && args(person)") public void doBefore(Person person) { System.out.println("前置通知"+person.getName()); } @AfterReturning(pointcut="anyMethod()",returning="persons") public void doAfterReturning(List<Person> persons) { System.out.println("后置通知"+persons.size()); } @AfterThrowing("anyMethod()") public void doAfterThrowing() { System.out.println("例外通知"); } @After("anyMethod()") public void doAfter() { System.out.println("最终通知"); } @Around("anyMethod()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { // 要执行pip.proceed方法 System.out.println("环绕通知"); return pjp.proceed(); } }

>> bean.xm配置

<aop:aspectj-autoproxy/> <bean id="myInterceptor" class="com.umikawa.aop.MyInterceptor" />

 

2.配置文件实现

>> 实现类

public class LogPrint { public void doAccessCheck() {}定义前置通知 public void doReturnCheck() {}定义后置通知 public void doExceptionAction() {}定义例外通知 public void doReleaseAction() {}定义最终通知 public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable { return pjp.proceed();环绕通知 } }

 

bean.xml中的配置

<bean id="log" class="cn.itcast.service.LogPrint"/> <aop:config> <aop:aspect id="myaop" ref="log"> <aop:pointcut id="mycut" expression="execution(* cn.itcast.service..*.*(..))"/> <aop:before pointcut-ref="mycut" method="doAccessCheck"/> <aop:after-returning pointcut-ref="mycut" method="doReturnCheck "/> <aop:after-throwing pointcut-ref="mycut" method="doExceptionAction"/> <aop:after pointcut-ref="mycut" method=“doReleaseAction"/> <aop:around pointcut-ref="mycut" method="doBasicProfiling"/> </aop:aspect> </aop:config>

 

你可能感兴趣的:(AOP_3.Spring AOP的实现与使用)