如何知道接口中注入了哪个bean?

How to know which bean was injected into interface?

所以我有一组软件包,它们是我扩展应用程序的基本代码。我的应用程序实现了一系列接口,然后由 spring 在 运行 时间(按配置)注入。我想知道有没有一种方法可以让我知道哪个 class 实现了接口被注入了。我需要这个,因为我有 JSON serializer/deserializer 我想执行的操作,但为此我需要知道注入的 class 。

我有一个 java 配置文件来描述布线,它将随游戏实现一起提供。但是到目前为止,我还没有能够得到实现接口的具体 class 。我也没有成功从上下文中请求该信息。

Ant 提示?

您可以使用反射让注入的实例告诉您它是什么实现class:injectedInstance.getClass().getName()。但是,除非您正在做一些特别的事情,否则请将其视为 hack。您可能应该重新审视您的设计,这样您就不需要这样做了。

您可以简单地自动装配接口并获取实现的 class 名称:

@Autowired
private Service service;

System.out.println(service.getClass().getName());

但是对于 Spring bean,spring 容器通常会代理它们,所以它并不总是有用,在上面的例子中 class 是一个 Spring class 叫:

hello.HelloServiceImpl$$EnhancerBySpringCGLIB$$ad2e225d

我怀疑你应该看看 Jackson 序列化程序,它应该可以处理所有这些,请参阅

所以我解决这个问题的方法是将一个对象注入 JSON 反序列化器并使用 getClass() 方法作为 Jackson 使用的模板。它就像一个魅力,甚至认为要注入的实现被注入到依赖项中发生的布线中!希望对您有所帮助!