如何在 Java 中监听对象实例化事件

How to listen to Object instantiation events in Java

我正在构建一个 Java 严重依赖 JaxB 和 Weld 的 SE 应用程序,两者的设计截然不同,本质上是不兼容的。为了说明,下面的记录器在解组后将为空。

@XmlRootElement(name="root")
public class MyObject {
    @Inject
    private Logger log;
}

使用 UnmarshallListener 我正在使用 BeanManager.

对现有对象实例进行焊接注入

实际上,我在程序中的所有对象上都使用了 CDI。我同样可以使用工厂方法对任何实例执行相同的注入,但这需要(大量)重构。

我想知道是否有任何方法可以通过覆盖

来覆盖代码中每个对象的实例化
Object o = new Object(); // Catch this event and perform CDI

是的,您可以使用 Instrumentation. The agent needs to register a ClassFileTransformer 捕获对象实例化,它将扫描所有已加载 类 的字节码以获取 新对象 指令并且做得很好.. 你需要它做什么。

查看 this tutorial 以获取有关如何使用检测包的示例。