返回顶部

收藏

DynamicProxy模拟Spring AOP

更多

DynamicProxy模拟Spring AOP

package cn.outofmemory;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;

interface Hello {
         void sayHello(String name);
}

 class MyHello implements Hello {
        public void sayHello(String name) {
              System.out.println("Hello " + name);
          }
 }

enum Level {
    INFO,DEBUGE;
}

class Logger {
    public static void logging(Level level, String context) {
        if (level.equals(Level.INFO)) {
            System.out.println(new Date()+ " " + context);
        }
        if (level.equals(Level.DEBUGE)) {
            System.out.println(new Date() + " " + context);
        }
    }

}

 class DynaProxyHello implements InvocationHandler {

         private Object delegate;

         public Object bind(Object delegate) {
             this.delegate = delegate;
             return Proxy.newProxyInstance(this.delegate.getClass().getClassLoader(), this.delegate.getClass().getInterfaces(), this);
         }

          public Object invoke(Object proxy, Method method, Object[] args)
                  throws Throwable {
              Object result = null;
              try {
                  //执行原来的方法之前记录日志
                  Logger.logging(Level.INFO, method.getName() + " Method Start!");
                  result = method.invoke(this.delegate, args);
               //执行原来的方法之后记录日志
                  Logger.logging(Level.DEBUGE, method.getName() + " Method end  .");
             } catch (Exception e) {
                  e.printStackTrace();
            }
              return result;
         }
}

public class AOPTest {
    public static void main(String[] args) {
                   Hello hello = (Hello)new DynaProxyHello().bind(new MyHello());
                  hello.sayHello(" Spring AOP");
              }
}

标签:java,spring,aop,代理

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. root 发表 2015-04-30 02:20:01 java框架篇—spring AOP 实现原理
  2. 博主 发表 2015-06-18 08:04:10 Spring之思
  3. 刘莉莉 发表 2017-12-25 13:19:11 Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
  4. 博主 发表 2015-03-18 08:14:03 Spring之思
  5. yeseng 发表 2017-09-01 14:13:03 Spring源码-AOP(三)Springboot与Aop
  6. 漠然 发表 2015-07-18 05:47:11 Spring AOP笔记
  7. 衔山 发表 2015-07-09 14:56:47 基于Redis的分布式锁的简易实现
  8. sulong 发表 2008-02-21 02:18:14 AOP简介,理解AOP
  9. hellas 发表 2018-05-21 12:13:24 使用 Spring Data 以 Redis 作为数据存储来构建应用
  10. xubiao.zhuang 发表 2018-05-27 11:56:24 SSM整合
  11. xubiao.zhuang 发表 2018-06-24 14:13:15 深入Spring Boot:快速集成Dubbo + Hystrix
  12. wenming.gapo 发表 2018-07-03 15:21:38 Jboot v1.6.1 发布,没有任何新增功能…

发表评论