Jdk动态代理代码(有接口)
/**
* jdk动态代理
*
*/
public class JDKProxy {
public static void main(String[] args) {
//创建Bird接口实现类代理对象
Class[] interfaces = {Bird.class};
//bird就是接口实现类代理对象
Bird bird = (Bird) Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces,new Ying(new Diao()));
bird.fly();
}
}
class Ying implements InvocationHandler {
//得到调用对象,构造
private Bird bird;
public Ying(Bird bird) {
this.bird = bird;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// if(“fly”.equals(method.getName())) {
// method.invoke(proxy, args);
// }
bird.fly();
System.out.println(“ying fly 20m…………”);
return null;
}
}
//定义接口
interface Bird {
public void fly();
}
//实现类
class Diao implements Bird {
public void fly() {
System.out.println("diao fly 10m............");
}
}
2 cglib动态代理(没有接口)
public class CGLIBProxy {
public static void main(String[] args) {
MyBook myBook = new MyBook(new Book());
Book book = myBook.createBook();
book.buy();
}
}
//创建Book类子类代理对象
class MyBook implements MethodInterceptor {
private Book book;
public MyBook(Book book) {
this.book = book;
}
//提供返回Book子类对象的方法
public Book createBook() {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(book.getClass());
enhancer.setCallback(this);
return (Book) enhancer.create();
}
public Object intercept(Object object, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
methodProxy.invokeSuper(object, objects);
System.out.println("增强......................");
return null;
}
}
class Book {
public void buy() {
System.out.println(“book buy……….”);
}
}