1,jdk代理
接口:
public interface IUserDao { void saybb(); }
代理工厂:
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyFactory { private Object o;//被代理对象 public ProxyFactory(Object o){ //构造器 this.o=o; } /** * 获取代理对象 */ public Object getPoxyInstance(){ return Proxy.newProxyInstance(this.o.getClass().getClassLoader(),this.o.getClass().getInterfaces(), new InvocationHandler(){ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before..."+proxy.getClass().getName()); Object po=method.invoke(o,args); System.out.println("after..."+proxy.getClass().getName()); return po; } } ); } }
调用类:
public class UserDao implements IUserDao{ public static void main(String [] args){ UserDao u=new UserDao(); IUserDao u2=(IUserDao) new ProxyFactory(u).getPoxyInstance(); u2.saybb(); u.sayBB(); u.saybb(); } public void sayBB(){ System.out.println("bai bai !!1111"); } @Override public void saybb() { System.out.println("bai bai !!2222"); } }
2,cglib代理
代理工厂
import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class ProxyFactory implements MethodInterceptor { private Object o; public ProxyFactory(Object o){ this.o=o; } public Object getPoxyInstance(){ Enhancer en=new Enhancer(); en.setSuperclass(o.getClass()); en.setCallback(this); return en.create(); } @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { System.out.println("before cglib"+obj.getClass().getName()); System.out.println("类加载器:"+obj.getClass().getClassLoader()); Object ro=method.invoke(o,args); System.out.println("after cglib"+obj.getClass().getName()); return null; } }
调用类:
package javatest.cglibProxy; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Timestamp; public class UserDao { public void sayhello(){ System.out.println("Hello !!"); } public static void main(String [] args){ UserDao u= new UserDao(); UserDao u2=(UserDao) new ProxyFactory(u).getPoxyInstance(); u2.sayhello(); } }