xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置IOC-->
<bean id="userdaoimpl" class="daoImpl.UserDaoImpl"/>
<bean id="logger" class="utils.Logger"/>
<aop:config>
<!--
配置切入点表达式:
id:唯一标识
expression:切入点表达式
此标签写在局部aop:aspect中时只能当前切面使用
也可以写在aop:config的最前面当做全局pointcut
-->
<aop:pointcut id="pc1" expression="execution(* daoImpl.UserDaoImpl.*(..))"/>
<aop:aspect id="loggerAdvice" ref="logger">
<!--
注意:后置通知和异常通知是互斥的
-->
<!--前置通知:在切入点方法执行之前执行-->
<!-- <aop:before method="log1" pointcut-ref="pc1"/>-->
<!-- <!–后置通知:在切入点方法正常执行之后执行–>-->
<!-- <aop:after-returning method="log2" pointcut-ref="pc1"/>-->
<!-- <!–异常通知:在切入点方法产生异常的时候执行–>-->
<!-- <aop:after-throwing method="log3" pointcut-ref="pc1"/>-->
<!-- <!–最终通知:无论切入点方法是否正常执行,都会最后执行的方法–>-->
<!-- <aop:after method="log4" pointcut-ref="pc1"/>-->
<!--配置环绕通知-->
<aop:around method="log5" pointcut-ref="pc1"/>
</aop:aspect>
</aop:config>
</beans>
具体通知类Logger
package utils;
import org.aspectj.lang.ProceedingJoinPoint;
public class Logger {
public void log1(){
System.out.println("前置通知");
}
public void log2(){
System.out.println("后置通知");
}
public void log3(){
System.out.println("异常通知");
}
public void log4(){
System.out.println("最终通知");
}
/**
* 环绕通知
* 这是spring框架提供的一种可以手动设置增强代码怎样执行的方式
* @param pjp
* @return
*/
public Object log5(ProceedingJoinPoint pjp){
Object value = null;
try {
Object[] args = pjp.getArgs();//获得切入点方法的参数
System.out.println("这里是前置通知");
value = pjp.proceed(args);//明确调入切入点方法
System.out.println("这里是后置通知");
return value;
}catch (Throwable e){
System.out.println("这里是异常通知");
throw new RuntimeException("发生异常!信息:");
}finally {
System.out.println("这里是最终通知");
}
}
}
留言