jdk和cglib动态代理的demo

JDK的动态代理是基于接口的

package  com.open.aop; 
public   interface  BusinessInterface   {   
  public   void  processBusiness();
}
 

目标对象

package com.open.aop;
public class BusinessObject implements BusinessInterface { 
   public void processBusiness() {       
     System.out.println("action");   
   }
}
 

代理对象

package com.open.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LogHandler implements InvocationHandler { 
   private Object delegate;   
 public Object binder(Object delegate) {            
    this.delegate=delegate;       
    return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
   delegate.getClass().getInterfaces(),this);   
 }   
 public Object invoke(Object proxy, Method method, Object[] args)            throws Throwable {   
     Object obj = null;     
     System.out.println("对象方法调用前");    
    try {            
         obj = method.invoke(delegate, args);        
      } catch (Exception e) {        }        
      System.out.println("对象方法调用后");        
     return obj;    
     }

}
 

测试类

package com.open.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {   
 public static void main(String[] args) {      
      BusinessInterface bi = (BusinessInterface) new LogHandler().binder(new BusinessObject());    
      bi.processBusiness();    

  }

}
 

输出结果

对象方法调用前
action
对象方法调用后

**********************************cglib******************************************

目标对象

public class Target {

    public String execute() {
        String message = "----------test()----------";
        System.out.println(message);
        return message;
    }
}

 拦截器

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;


public class MyMethodInterceptor implements MethodInterceptor {

    public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        System.out.println(">>>MethodInterceptor start...");
        Object result = methodProxy.invokeSuper(object,args);
        System.out.println(">>>MethodInterceptor ending...");
        return "hahahh";
    }
}
 
import net.sf.cglib.proxy.Enhancer;
public class TestCglibProxy  {

    public static void main(String rags[]){
        Target target = new Target();
        TestCglibProxy test = new TestCglibProxy();
        Target proxyTarget = (Target)test.createProxy(Target.class);
        String res=proxyTarget.execute();
        System.out.println(res);
    }

    public Object createProxy(Class targetClass){
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(targetClass);
        enhancer.setCallback(new MyMethodInterceptor());
        return enhancer.create();
    }
}

 运行结果:

结果 写道
C:\classes>java -cp .;C:\classes\cglib-nodep-2.1_3.jar TestCglibProxy
>>>MethodInterceptor start...
----------test()----------
>>>MethodInterceptor ending...
hahahh

C:\classes>

 

你可能感兴趣的:(java,jdk,AOP,c,.net)