天天看点

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>

继续阅读