1

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

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

蚂蚁提示?

4

3 回答 3

2

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

于 2017-02-21T15:24:32.827 回答
1

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

@Autowired
private Service service;

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

然而,对于 Spring bean,spring 容器通常会代理它们,所以它并不总是有帮助,在上面的例子中,这个类是一个名为的 Spring 类:

hello.HelloServiceImpl$$EnhancerBySpringCGLIB$$ad2e225d

我怀疑您应该查看应该处理所有这些的 Jackson 序列化程序,请参阅Java - Jackson Annotations to handle no proper constructor

于 2017-02-21T15:30:55.307 回答
0

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

于 2017-03-02T14:51:59.043 回答