美文网首页我爱编程
spring框架AOP实现知识点总结

spring框架AOP实现知识点总结

作者: 戎码益深 | 来源:发表于2018-03-28 15:03 被阅读31次

    spring框架AOP实现知识点总结

    1. AOP核心组件

    1.1. 切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象

    1.2. 连接点(joinpoint):被拦截到的方法,字段或构造方法

    1.3. 切入点(pointcut):对连接点进行拦截的定义

    1.4. 通知(advice):拦截到连接点之后要执行的代码

    1.5. 目标对象(target):代理的目标对象

    2. AOP的5种增强处理类型

    3. 使用XML配置方式实现前后置增强类记录日志

    3.1. 使用jar包

    3.2. 定义业务方法

    3.3. 定义增强类

    3.4. 配置log4J资源文件:

    3.4.1. 设置记录日志的级别(fatal>error>warn>info>debug)

    3.4.2. 设置日志输出的目标(console,file)

    3.4.3. 设置日志输出的格式

    3.4.4. 如果使用文件输出,需要设置日志文件的文件名

    3.5. 配置spring的xml文件

    3.5.1. 注入业务对象

    3.5.2. 注入完成切入的增强对象

    3.5.3. 设置AOP

    3.5.3.1. 设置切入点pointcut:被切入的对象的范围

    3.5.3.2. Execute表达式:指定需要被切入的方法的范围表达式

    //com.service包下的以Service结尾的所有类的所有方法

    execution(* com.service.*Service.*(..))

    3.5.3.3. 设置切面(aspect):指定完成切入操作的增强类的方法,以及关联对应切入点

    ref 完成切面的对象bean的id

    pointcut-ref 指定需要切入的目标位置,切入点

    -->

    4. 环绕增强

    4.1. 定义增强类

    package com.aop;

    import java.util.Arrays;

    import org.apache.log4j.Logger;

    import org.aspectj.lang.ProceedingJoinPoint;

    //环绕增强类:实现全程监控被切入方法的运行状态

    public class AroundLogger {

    Logger logger=Logger.getLogger(AroundLogger.class);

    /**

    * 在目标对象的方法执行前后进行增强操作,如果目标方法发生异常,由增强方法来处理

    * @param point 连接点对象:拥有被切入对象的信息

    * @return 被切入方法的返回值

    */

    public Object doListen(ProceedingJoinPoint point){

    logger.info(point.getTarget()+"对象的"+point.getSignature().getName()

    +"方法即将执行,方法参数列表为:"+Arrays.toString(point.getArgs()));

    Object result=null;

    try {

    //调用连接点对象的进程方法,让目标对象的业务方法执行

    //该方法返回的是目标对象的被切入方法的返回值

    result= point.proceed();

    } catch (Throwable e) {

    e.printStackTrace();

    logger.info(point.getTarget()+"对象的"+point.getSignature().getName()

    +"方法发生异常!异常信息为:"+e.getMessage());

    result=0;

    }finally{

    logger.info(point.getTarget()+"对象的"+point.getSignature().getName()

    +"方法执行完毕,方法参数列表为:"+Arrays.toString(point.getArgs())+";目标方法的返回值为"+result);

    }

    return result;

    }

    }

    4.2. 在spring配置文件中注入需要被增强的业务对象,以及环绕增强类对象

    ref 完成切面的对象bean的id

    pointcut-ref 指定需要切入的目标位置,切入点

    -->

    5. 使用注解实现AOP

    5.1. 定义注解方式的增强类

    //环绕增强类:实现全程监控被切入方法的运行状态

    //@Aspect 当前类为增强类

    @Aspect

    public class AroundLogger2 {

    Logger logger=Logger.getLogger(AroundLogger2.class);

    /**

    * 在目标对象的方法执行前后进行增强操作,如果目标方法发生异常,由增强方法来处理

    * @param point 连接点对象:拥有被切入对象的信息

    * @return 被切入方法的返回值

    */

    @Around(value="execution(* com.service.*Service.*(..))")

    public Object doListen(ProceedingJoinPoint point){

    logger.info(point.getTarget()+"对象的"+point.getSignature().getName()

    +"方法即将执行,方法参数列表为:"+Arrays.toString(point.getArgs()));

    Object result=null;

    try {

    //调用连接点对象的进程方法,让目标对象的业务方法执行

    //该方法返回的是目标对象的被切入方法的返回值

    result= point.proceed();

    } catch (Throwable e) {

    e.printStackTrace();

    logger.info(point.getTarget()+"对象的"+point.getSignature().getName()

    +"方法发生异常!异常信息为:"+e.getMessage());

    result=0;

    }finally{

    logger.info(point.getTarget()+"对象的"+point.getSignature().getName()

    +"方法执行完毕,方法参数列表为:"+Arrays.toString(point.getArgs())+";目标方法的返回值为"+result);

    }

    return result;

    }

    }

    5.2. 在spring配置文件中注入需要增强的对象和增强对象

    如果想学习Java性能优化,工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加下826775302群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

    相关文章

      网友评论

        本文标题:spring框架AOP实现知识点总结

        本文链接:https://www.haomeiwen.com/subject/ejaycftx.html