使用OSGi可以进行字节码操作吗?

问题描述 投票:9回答:2

我正在制作an application server,在其中我需要使用一些字节码操作(例如,将自定义equalshashCode方法插入到以@Entity注释的类中)。现在,我给JVM一个Java代理(-javaagent选项),该代理使用ASM进行字节码转换。

我一直在考虑使用OSGi,但我不知道它是否允许我进行必要的字节码操作。

  1. 使用OSGi时可以进行字节码操作吗?怎么样?
  2. 一个包是否有可能声明自己,它需要某种字节码操作才能起作用?例如,应用程序服务器要求操纵其某些核心类。
  3. 是否可以指定其他捆绑软件需要某些字节码操作,而该捆绑软件却不知道呢?例如,必须对服务器上运行的所有应用程序进行操作,但这些应用程序不需要了解它。
  4. 一个包是否可以声明自己,依赖它的所有包都必须进行字节码处理?这使我可以轻松地声明,必须对所有依赖包含@Entity批注的API捆绑包的人进行操作。
java aop osgi bytecode-manipulation
2个回答
7
投票

OSGI 4.3添加了WeavingHook,可让您使用所选的字节码操纵器进行字节码操纵。我在一个项目中将它与JavaAssist一起使用,效果很好。


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)取决于您使用的扩展器模式。这是弹簧扩展器的工作方式,在平台启动之前,在软件包的META-INF / spring文件夹中查找配置文件。

3)同样,这取决于您定义的扩展程序。

4)我相信这是可能的,因为在启动捆绑包之前,必须先解决捆绑包并启动依赖关系,然后扩展程序才能分析捆绑包依赖关系并开始字节码操作。

© www.soinside.com 2019 - 2024. All rights reserved.