A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李敬 中级黑马   /  2012-8-17 02:30  /  1051 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在张孝祥老师视频里讲到代理类部分时候
举例写出ArrayList目标类的代理,用的是Proxy类中的方法 实现Collections接口.
张老师说过
用CGLIB库可以动态生成一个类的子类,一个类的子类也可以用作该类的的代理,所以,如果要为一个没有实现接口的类生成动态代理类,那么可以使用CGLIB库。

那具体怎么可以动态生成一个类的子类,能简单的举出一个这样的程序吗?
学习学习.

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
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();  
    }  
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马