• some notes about spring aop


    1 . 
    timeCountIntecetor implements handlerInterceptor {
         preHandle(); postHandle(); afterComplete();
    }
     
     
     2 . 动态代理 by implement InvocationHandler (对接口)
    class MyProxy implements InvocationHandler
    {
        Object obj;
        public Object bind(Object obj)
        {
            this.obj = obj;
            return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
                    .getClass().getInterfaces(), this);
        }
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable
        {
            System.out.println("I'm proxy!");
            Object res = method.invoke(obj, args);
            return res;
        }
    }
     
    public class DynamicProxy
    {
        public static void main(String[] args)
        {
            MyProxy myproxy = new MyProxy();
            HoseeDynamicimpl dynamicimpl = new HoseeDynamicimpl();
            HoseeDynamic proxy = (HoseeDynamic)myproxy.bind(dynamicimpl);
            System.out.println(proxy.sayhi());
        }
    }
    

      

     
     3 . 对类:
    @Aspect
    ServiceTimeCountAspect:
     
     
    @Pointcut("execution(* me.ele.jarch.aries.service.*.*(..))")
        private void serviceMethod() {
        }
     
    //  @Around("me.ele.jarch.aries.aspect.ServiceTimeCountAspect.serviceMethod()")
    //    @Around("serviceMethod() || repositoryMethod()")
        @Around("serviceMethod()")
        public Object logServiceMethodRunningTime(ProceedingJoinPoint pjp)
                throws Throwable {
            // start stopwatch
            StopWatch watch = new StopWatch();
            watch.start();
     
            Object retVal = pjp.proceed();
     
            // stop stopwatch
            watch.stop();
            Long time = watch.getTotalTimeMillis();
            String methodName = pjp.getSignature().getName();
     
            logger.info("service method: {} time count : {}", methodName, time);
     
            return retVal;
        }
     
    Spring AOP 会动态选择使用 JDK 动态代理、CGLIB 来生成 AOP 代理,如果目标类实现了接口,Spring AOP 则无需 CGLIB 的支持,直接使用 JDK 提供的 Proxy 和 InvocationHandler 来生成 AOP 代理即可。
  • 相关阅读:
    windows 安装 anaconda
    全局路径规划--A*算法详解
    编码的种类
    request的encode和decode
    BGP的13条选路原则
    BGP路由黑洞 路由反射器 和联盟2021-07-28
    JMS-ActiveMQ-SpringBoot
    JMS-ActiveMQ-Spring
    JMS-中间件MQ-activeMQ入门
    spring-ssm整合
  • 原文地址:https://www.cnblogs.com/mywy/p/6130144.html
Copyright © 2020-2023  润新知