前置增强,后置增强,异常抛出增强,最终增强,环绕增强
Before:前置增强处理,在目标方法前织入增强处理
AfterReturning:后置增强处理,在目标方法正常执行(不出现异常)后织入增强处理
AfterThrowing:异常增强处理,在目标方法抛出异常后织入增强处理
After:最终增强处理,不论方法是否抛出异常,都会在目标方法最后织入增强处理
Around:环绕增强处理,在目标方法的前后都可以织入增强处理
简单案例展示
package com.spring1.aop.log;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
/**
* Created by IntelliJ IDEA.
*
*
* @Author : zrc
* @create 2022/8/26 11:21
*/
public class UserServiceLogger {
Logger logger = Logger.getLogger(UserServiceLogger.class);
/**
* 前置增强
*/
public void before() {
logger.info("保存前");
}
/**
* 后置增强
*/
public void afterReturning(JoinPoint jp, Object result) {
//连接点(Join Point),getTarget()获取对象,getSignature()连接点方法信息
logger.info(jp.getTarget() + "\t" + jp.getSignature().getName() + "方法\t" + result);
logger.info("保存后");
}
/**
* 异常抛出增强
*/
public void throwException(JoinPoint jp,RuntimeException e){
logger.info(jp.getTarget()+"\t"+jp.getSignature().getName()+"方法,抛出了"+e);
logger.info("异常了");
}
/**
* 最终增强
*/
public void afterLogger(JoinPoint jp){
logger.info(jp.getTarget()+"\t"+jp.getSignature().getName()+"方法");
logger.info("最终增强");
}
/**
* 环绕增强
*/
public void aroundLogger(ProceedingJoinPoint pjp){
try {
logger.info("执行前");
Object obj=pjp.proceed();
logger.info("执行后");
} catch (Throwable throwable) {
logger.info("异常了");
throwable.printStackTrace();
} finally {
logger.info("最终了");
}
}
}
<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
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--创建组件-->
<bean class="com.spring1.aop.dao.impl.UserDaoImpl" id="userDao"></bean>
<bean class="com.spring1.aop.service.impl.UserServiceImpl" id="userService">
<property name="userDao" ref="userDao"></property>
</bean>
<!--日志组件-->
<bean class="com.spring1.aop.log.UserServiceLogger" id="userServiceLogger"></bean>
<!--aop配置-->
<aop:config>
<!--<aop:pointcut id="point" expression="execution(public void addUser(com.spring1.aop.bean.User))"/>-->
<!--pointcut切入点,* com.spring1.aop.service..*.*(..)所有业务逻辑包下(包括子包)的所有类的所有方法,任意参数-->
<aop:pointcut id="point" expression="execution(* com.spring1.aop.service..*.*(..))"/>
<!--aspect切面-->
<aop:aspect ref="userServiceLogger">
<!--前置增强-->
<aop:before method="before" pointcut-ref="point"></aop:before>
<!--后置增强-->
<aop:after-returning method="afterReturning" pointcut-ref="point" returning="result"></aop:after-returning>
<!--异常抛出增强-->
<aop:after-throwing method="throwException" pointcut-ref="point" throwing="e"></aop:after-throwing>
<!--最终增强-->
<aop:after method="afterLogger" pointcut-ref="point"></aop:after>
<!--环绕增强-->
<aop:around method="aroundLogger" pointcut-ref="point"></aop:around>
</aop:aspect>
</aop:config>
</beans>