码迷,mamicode.com
首页 > 其他好文 > 详细

cglib源码分析(三):Class生成策略

时间:2014-07-23 15:40:49      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   io   for   

cglib中生成类的工作是由AbstractClassGenerator的create方法使用相应的生成策略完成,具体代码如下:

private GeneratorStrategy strategy = DefaultGeneratorStrategy.INSTANCE;
byte[] b = strategy.generate(this);

GeneratorStrategy是一个接口,它负责调用ClassGenerator 的generateClass方法来生成类。DefaultGeneratorStrategy是cglib提供的一个默认的生成策略,部分代码如下:

public class DefaultGeneratorStrategy implements GeneratorStrategy {
    public static final DefaultGeneratorStrategy INSTANCE = new DefaultGeneratorStrategy();
    
    public byte[] generate(ClassGenerator cg) throws Exception {
        DebuggingClassWriter cw = getClassVisitor();
        transform(cg).generateClass(cw);
        return transform(cw.toByteArray());
    }

    protected DebuggingClassWriter getClassVisitor() throws Exception {
      return new DebuggingClassWriter(ClassWriter.COMPUTE_MAXS);
    }
... ...
protected byte[] transform(byte[] b) throws Exception { return b; } protected ClassGenerator transform(ClassGenerator cg) throws Exception { return cg; } }

DefaultGeneratorStrategy实现了ClassGenerator接口,并提供两个transform方法。用户可以通过继承DefaultGeneratorStrategy并重写相关的方法来检查或者修改生成类。

类生成策略和命名策略一样,使用了策略设计模式,用户可以通过实现GeneratorStrategy接口来自定义生成策略,并使用AbstractClassGenerator的setStrategy方法来设置自定义策略。

cglib源码分析(三):Class生成策略,布布扣,bubuko.com

cglib源码分析(三):Class生成策略

标签:style   blog   color   使用   io   for   

原文地址:http://www.cnblogs.com/cruze/p/3862891.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!