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>