zoukankan      html  css  js  c++  java
  • 了解AOP

    AOP:面向切面编程
      1.AOP:把交叉功能模块化,把应用服务和业务逻辑完全分离。
      2.术语:
         a) 切面(Aspect):就是指你要实现的交叉功能。如:日志记录、事务管理、安全验证()。
         b) 连接点(Joinpoint):应用程序执行过程中可以插入切面的地点。如某方法调用时或者处理异常时。Spring只支持方法连接点
         c) 通知(Advice):在特定的连接点,AOP框架要执行的动作。 切面的功能被叫做通知。通知有各种类型,其中包括“around”、“before”和“after”等。如:向日志文件写日志、开启事务、提交事务。
         d) 切入点(Pointcut):定义了需要注入advice的位置。通常使用一些表达式来匹配连接点。如

    <aop:pointcut id="allMethod" expression="execution(* com.qiujy.service.*.*(..))"/>

         e) 目标对象(Target Object):被一个或者多个切面所通知的对象。

         f) 代理对象(Proxy): 向目标对象应用通知之后被创建的对象。

         g) 织入(Weaving):把切面应用到目标对象来创建新的代理对象的过程。Spring的切面是在程序运行的某个时刻被织入的。

      3.要使用Spring的完整AOP功能,需要添加:cglib包,AspectJ的包(2个)。
      4. 配置文件方式实现AOP
        1) 定义一个切面类。这个类中定义各个通知方法。声明到Spring的配置文件中:   

    <bean id="logAspectBean" class="com.qiujy.aspect.LogAspect"/>
     <aop:config>
       <!-- 配置一个切面 -->
       <aop:aspect id="logAspect" ref="logAspectBean">
         ...
       </aop:aspect>
     </aop:config>

        2) 定义切入点:通过一个AspectJ的切入点表达式来定义选择哪些类的哪些方法需要切入通知。   

    <bean id="logAspectBean" class="com.qiujy.aspect.LogAspect"/>
     <aop:config>
       <!-- 配置一个切面 -->
       <aop:aspect id="logAspect" ref="logAspectBean">
         <!-- 定义切入点 -->
         <aop:pointcut id="allMethod" expression="execution(* com.qiujy.service.*.*(..))"/>
             ...
       </aop:aspect>
     </aop:config>

        3) 声明通知:
      

    <bean id="logAspectBean" class="com.qiujy.aspect.LogAspect"/>
      <aop:config>
         <!-- 配置一个切面 -->
         <aop:aspect id="logAspect" ref="logAspectBean">
             <!-- 定义切入点 -->
             <aop:pointcut id="allMethod" expression="execution(* com.qiujy.service.*.*(..))"/>
             <!-- 配置通知 -->
             <aop:before method="start" pointcut-ref="allMethod" />
             <aop:after-returning method="end" pointcut-ref="allMethod"/>
             <aop:after method="back" pointcut-ref="allMethod"/>
             <aop:after-throwing method="exception" pointcut-ref="allMethod"/>
         </aop:aspect>
      </aop:config>

       5. Annotation方式实现AOP

        1) 配置Spring对AspectJ注解的支持:<aop:aspectj-autoproxy/>
        2) 使用注解定义切面、切入点、通知:

    @Aspect  //声明一个切面类
    public class LogAspect {
     private Log log = LogFactory.getLog(this.getClass());
    
     //定义了一个切入点(使用表达式来选择连接点)
     @Pointcut("execution(* com.qiujy.service.*.*(..))")
     private void bbb(){}
     
     //声明前置通知
     @Before("execution(* com.qiujy.service.*.add*(..))")
     public void start(JoinPoint call) {
      
      String className = call.getTarget().getClass().getName();
      String methodName = call.getSignature().getName();
      
      log.info(className + "类的" + methodName + "方法开始了");
     }
     //声明返回后通知
     @AfterReturning("bbb()")
     public void end() {
      log.info("方法正常结束了");
     }
     
     //声明方法退出后通知
     @After("bbb()")
     public void back(){
      log.info("方法返回了");
     }
     
     //声明异常抛出后通知
     @AfterThrowing("bbb()")
     public void exception() {
      log.info("方法执行出异常了");
     }
    }

     

  • 相关阅读:
    python 运用numpy库与matplotlib库绘制数据图
    pil库的介绍与应用
    使用jieba库与wordcloud库第三方库进行词频统计
    将驼峰命名转为连字符格式
    数组去重的多种方法
    数字美化-pretty-number 将数字转换成k 、w
    npm方式开发的插件使用yarn link的方式引入到目标项目中,在目标项目中无法读取到Vue,vuex, vue-i18n的解决方法
    eslint配置
    webpack 中的 process.env
    类型“VueConstructor<Vue>”上不存在属性“install”。ts(2339)
  • 原文地址:https://www.cnblogs.com/IcreamPrince/p/3995618.html
Copyright © 2011-2022 走看看