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


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方法來設置自定義策略。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM