大家好,我一直在 javassist 圖書(shū)館嘗試我的雙手,似乎遇到了我無(wú)法跨越的障礙。問(wèn)題是我想動(dòng)態(tài)創(chuàng)建一個(gè)配置類(lèi)來(lái)擴(kuò)展球衣的 ResourceConfig 類(lèi),并且在構(gòu)造函數(shù)中我想注冊(cè)包和工廠(chǎng)對(duì)象以進(jìn)行注入。但每次我得到錯(cuò)誤(發(fā)布在下面)public static void main(String[] args) throws Exception { // TODO Auto-generated method stub ClassPool pool = ClassPool.getDefault(); CtClass superCc = null; try { superCc = pool.get(ResourceConfig.class.getCanonicalName()); } catch (NotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { CtClass cc = pool.makeClass("org.demonking.AppConfig"); cc.setSuperclass(superCc); System.out.println(cc.getSuperclass().getName()); CtConstructor constructor = new CtConstructor(new CtClass[0], cc); constructor.setBody("{\n"+"packages(\"org.demonking\");"+"\n"+"register(InjectorDemo.class);"+"\n"+"}"); cc.addConstructor(constructor); } catch (CannotCompileException e) { // TODO Auto-generated catch block e.printStackTrace(); }//rest of my jersey code}我想動(dòng)態(tài)創(chuàng)建的原始 AppConfig(工作正常)public class AppConfig extends ResourceConfig{ public AppConfig() { packages("org.demonking"); register(new AbstractBinder(){ @Override protected void configure() { bindFactory(ContextHelperFactory.class) .to(ContextHelper.class) .in(RequestScoped.class); } }); }請(qǐng)注意,在研究時(shí)我發(fā)現(xiàn) javassist 對(duì)匿名內(nèi)部類(lèi)有一些限制,因此代碼已轉(zhuǎn)移到 InjectorDemo 類(lèi)。public class InjectorDemo extends AbstractBinder { @Override protected void configure() { // TODO Auto-generated method stub bindFactory(ContextHelperFactory.class) .to(ContextHelper.class) .in(RequestScoped.class); }}
Javassist 不調(diào)用超類(lèi)中定義的方法
達(dá)令說(shuō)
2022-06-04 15:55:14