1、JDK动态代理,
运行过程中动态生成实现接口的类。
Proxy.newProxyInstance 返回指定实现接口的类对象,对象是虚拟的。
TestInterface test=(TestInterface) Proxy.newProxyInstance(TestInterfaceImpl.class.getClassLoader(), TestInterfaceImpl.class.getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("方法被调用了"); return null; } });
2、Cglib动态代理
修改字节码,成为被代理类的子类。
public class TestCglib implements MethodInterceptor { private Object targetObject; public Object createProxyObject(Object object){ this.targetObject=object; Enhancer enhancer=new Enhancer(); enhancer.setSuperclass(object.getClass()); enhancer.setCallback(this);//this是MethodInterceptor 的实现类 Object proxyObj=enhancer.create(); return proxyObj; } @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { return null; } }