欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

DynamicProxy模拟Spring AOP,dynamicproxyaop,DynamicProxy

来源: javaer 分享于  点击 1088 次 点评:149

DynamicProxy模拟Spring AOP,dynamicproxyaop,DynamicProxy


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");              }}
相关栏目:

用户点评