所以我有一组包,它们是我用于扩展应用程序的基本代码。我的应用程序实现了一系列接口,然后在运行时由 spring 注入(按照配置)。我想知道是否有一种方法可以知道注入了哪个实现接口的类。我需要这个,因为我有想要执行的 JSON 序列化器/反序列化器操作,但为此我需要知道注入的类。
我有一个描述接线的 java 配置文件,它将与游戏实现一起提供。但到目前为止,我还没有得到实现接口的具体类。我也没有成功从上下文中请求该信息。
蚂蚁提示?
所以我有一组包,它们是我用于扩展应用程序的基本代码。我的应用程序实现了一系列接口,然后在运行时由 spring 注入(按照配置)。我想知道是否有一种方法可以知道注入了哪个实现接口的类。我需要这个,因为我有想要执行的 JSON 序列化器/反序列化器操作,但为此我需要知道注入的类。
我有一个描述接线的 java 配置文件,它将与游戏实现一起提供。但到目前为止,我还没有得到实现接口的具体类。我也没有成功从上下文中请求该信息。
蚂蚁提示?
您可以使用反射让注入的实例告诉您它是什么实现类:injectedInstance.getClass().getName()
. 但是,除非您正在做一些特别的事情,否则请认为这是一个 hack。你可能应该重新审视你的设计,这样你就不需要这样做了。
您可以简单地自动装配接口并获取实现的类名:
@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
所以我解决这个问题的方法是将一个对象注入到 JSON 反序列化器中,并使用 getClass() 方法作为 Jackson 使用的模板。它就像一个魅力,甚至认为要注入的实现被注入到依赖项中发生的布线中!希望能帮助到你!