我正在制作an application server并且在其中我需要使用一些字节码操作(例如,将自定义equals
和hashCode
方法插入到使用@Entity
注释的类中。现在我给JVM一个Java代理(-javaagent选项),它使用ASM进行字节码转换。
我一直在考虑使用OSGi,但我不知道它是否允许我进行必要的字节码操作。
@Entity
注释的API包的人都必须进行操作。答案 0 :(得分:7)
OSGI 4.3添加了WeavingHook,它允许您使用您选择的字节代码操作符进行字节代码操作。我在我的一个项目中使用JavaAssist并且效果很好。
答案 1 :(得分:3)
1)是的,可以在OSGi中进行字节码操作。与标准java有点不同,您需要使用此处描述的扩展器模式http://www.osgi.org/blog/2007/02/osgi-extender-model.html。 我相信Eclipse在他们的equinox方面项目中使用它:http://www.eclipse.org/equinox/incubator/aspects/。 Spring DM肯定使用这种模式来自动配置osgi dm模块。
2)这取决于你使用的扩展模式。这是Spring扩展器如何工作,在平台启动之前在bundle的META-INF / spring文件夹中查找配置文件。
3)同样,这取决于你定义的扩展器。
4)我相信这是可能的,因为在启动bundle之前,它必须解决并且依赖关系已经开始,然后你的扩展器可以分析bundle依赖关系并开始字节码操作。