jdk动态代理基于接口
public interface Fly { void fly(); }
public class Person implements Fly { @Override public void fly() { System.out.println("person fly=="); } }
public class Client { public static void main(String[] args) { Person person =new Person(); Fly proxyInstance = (Fly) Proxy.newProxyInstance(Fly.class.getClassLoader(), Person.class.getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("---before"); return method.invoke(person,args); } }); proxyInstance.fly(); }
cglib动态代理基于继承
public final class Book { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
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 BookCglib implements MethodInterceptor { private Object target; public Object getProxy(Object target){ this.target = target; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(this.target.getClass()); enhancer.setCallback(this); return enhancer.create(); } @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("cglib before"); methodProxy.invokeSuper(o,objects); return null; } }
public class CglibClient { public static void main(String[] args) { Book book = new Book(); BookCglib bookCglib = new BookCglib(); Book proxy = (Book) bookCglib.getProxy(book); String name = proxy.getName(); System.out.println(name); } }