Spring框架五种增强方式

前置增强,后置增强,异常抛出增强,最终增强,环绕增强

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>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值