黑马程序员技术交流社区
标题:
动态生产代理类的问题
[打印本页]
作者:
李敬
时间:
2012-8-17 02:30
标题:
动态生产代理类的问题
在张孝祥老师视频里讲到代理类部分时候
举例写出ArrayList目标类的代理,用的是Proxy类中的方法 实现Collections接口.
张老师说过
用CGLIB库可以动态生成一个类的子类,一个类的子类也可以用作该类的的代理,所以,如果要为一个没有实现接口的类生成动态代理类,那么可以使用CGLIB库。
那具体怎么可以动态生成一个类的子类,能简单的举出一个这样的程序吗?
学习学习.
作者:
王海亮
时间:
2012-8-17 04:06
collections 是类不是接口 跟arrays 类差不多
public interface BookFacade {
public void addBook();
}
/**
* 这个是没有实现接口的实现类
*
*/
public class BookFacadeImpl1 {
public void addBook() {
System.out.println("增加图书的普通方法...");
}
}
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
**
* 使用cglib动态代理
*
*
*/
public class BookFacadeCglib implements MethodInterceptor {
private Object target;
/**
* 创建代理对象
*
*/
public Object getInstance(Object target) {
this.target = target;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(this.target.getClass());
// 回调方法
enhancer.setCallback(this);
// 创建代理对象
return enhancer.create();
}
// 回调方法
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println("事物开始");
proxy.invokeSuper(obj, args);
System.out.println("事物结束");
return null;
}
}
import net.battier.dao.impl.BookFacadeImpl1;
import net.battier.proxy.BookFacadeCglib;
public class TestCglib {
public static void main(String[] args) {
BookFacadeCglib cglib=new BookFacadeCglib();
BookFacadeImpl1 bookCglib=(BookFacadeImpl1)cglib.getInstance(new BookFacadeImpl1());
bookCglib.addBook();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2