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

时间:2017-02-21 15:11:58

标签: java spring dependency-injection spring-java-config interface-implementation

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

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

Ant提示?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

@Autowired
private Service service;

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

但是对于Spring bean,spring容器通常代理它们,因此它并不总是有用,在上面的类中是一个名为的Spring类:

hello.HelloServiceImpl$$EnhancerBySpringCGLIB$$ad2e225d

我怀疑你应该看看应该处理所有这些的杰克逊序列化,请参阅Java - Jackson Annotations to handle no suitable constructor

答案 2 :(得分:0)

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