zoukankan      html  css  js  c++  java
  • Spring-AOP解析

    策略模式:选择动态代理还是CGLIB方式:

    1、这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

    2、AOP基本上是通过代理机制实现的

    3、写好验证用户的代码,然后告诉Spring你要把这段代码加到哪几个地方(execution处),Spring就会帮你加过去,而不要你自己Copy过去

    4、在与mybatis的结合中,可以通过配置AOP生成事务代理,<tx:advice>配置AOP中的通知。

    <aop:advisor advice-ref="txAdvice"  

                pointcut-ref="interceptorPointCuts" /> 

    4、注解的方式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @Aspect
    public class Log {
        @Before("execution(* cn.sxt.service.impl.*.*(..))")
        public void before(){
            System.out.println("-----方法执行前-----");
        }
        @After("execution(* cn.sxt.service.impl.*.*(..))")
        public void after(){
            System.out.println("-----方法执行后-----");
        }
        @Around("execution(* cn.sxt.service.impl.*.*(..))")
        public Object aroud(ProceedingJoinPoint jp) throws Throwable{
            System.out.println("环绕前");
            System.out.println("签名:"+jp.getSignature());
            //执行目标方法
             Object result = jp.proceed();
            System.out.println("环绕后");
            return result;
        }
    }
    <wiz_tmp_tag class="wiz-block-scroll">
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <bean id="log" class="cn.sxt.log.Log"/>
    <bean id="afterLog" class="cn.sxt.log.AfterLog"/>
     <!--<bean id="exceptionlog" class="cn".sxt.log.ExceptionLog></bean> -->
    <aop:config>
        <aop:pointcut expression="execution(* cn.sxt.service.impl.*.*(..))" id="pointcut"/>
         <!--<aop:advisor advice-ref="exceptionlog" pointcut-ref="pointcut"/> -->
        <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
        <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>
    </aop:config>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <bean id="userService" class="cn.sxt.service.impl.UserServiceImpl"/>
    <bean id="log" class="cn.sxt.log.Log"/>
    <aop:aspectj-autoproxy/>
    <!--<aop:config>-->
        <!--<aop:aspect ref="log">-->
            <!--<aop:pointcut expression="execution(* cn.sxt.service.impl.*.*(..))" id="pointcut"/>-->
            <!--<aop:before method="before" pointcut-ref="pointcut"/>-->
            <!--<aop:after method="after" pointcut-ref="pointcut"/>-->
        <!--</aop:aspect>-->
    <!--</aop:config>-->

     

  • 相关阅读:
    bag of words in c++
    中位数计算
    awk数据预处理
    收集主机OS相关数据
    Kernel trick----PRML读书笔记
    Error:java: 不再支持源选项 5。请使用 6 或更高版本。
    springboot mybatis日志级别
    java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
    docker部署Nacos集群
    WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
  • 原文地址:https://www.cnblogs.com/shuchen007/p/9178184.html
Copyright © 2011-2022 走看看