class CglibProxyBytecodeTransformer
        extends AbstractProxyBytecodeTransformer {
    public CglibProxyBytecodeTransformer(ClassPool classPool) {
        super(classPool);
    }

    @Override
    protected String getInitCall(CtClass cc, String initFieldName)
            throws Exception {<FILL_FUNCTION_BODY>}
}

        CtMethod[] methods = cc.getDeclaredMethods();
        StringBuilder strB = new StringBuilder();
        for (CtMethod ctMethod : methods) {
            if (ctMethod.getName().startsWith("CGLIB$STATICHOOK")) {
                ctMethod.insertAfter(initFieldName + "=true;");
                strB.insert(0, ctMethod.getName() + "();");
                break;
            }
        }

        if (strB.length() == 0)
            throw new RuntimeException(
                    "Could not find CGLIB$STATICHOOK method");
        return strB.toString() + "CGLIB$BIND_CALLBACKS(this);";
    
<methods>public void <init>(org.hotswap.agent.javassist.ClassPool) ,public byte[] transform(byte[]) throws java.lang.Exception<variables>private org.hotswap.agent.javassist.ClassPool classPool