我可以在多个线程中共享Javassist类,以便在Web应用程序中获得更好的性能吗?我认为我可以为ConcurrentMap
创建一个proxyClass
的缓存,以避免在每个页面请求中创建。
我的代码是:
ProxyFactory factory = new ProxyFactory();
factory.setFilter(IGNORE_BRIDGE_AND_OBJECT_METHODS);
factory.setInterfaces(new Class[] { type });
Class<?> proxyClass = factory.createClass(); // can I cache here after class creation?
Object proxyInstance = ...; // objenesis creates new instance here
setHandler(proxyInstance, myCustomHandlerHere);
更新:我看到了Javassist代码,Javassist也提供了缓存。
答案 0 :(得分:0)
当然可以。 Javassist编译的类是第一类类(即使只是很短的时间),因此最好在创建类之后对它们进行缓存,以节省自己重复编译它们的开销。此外,您不必为您的类创建不可能的名称,因为您只需重新编译相同的虚拟代码一次。