1

所以我有一个设置软件包,它是扩展应用程序的基本代码。我的应用程序实现了一系列接口,然后在运行时通过弹簧注入(如配置)。我想知道是否有一种方法可以知道哪个类实现了接口被注入。我需要这个,因为我有我想要执行的JSON序列化器/反序列化器操作,但为此我需要知道注入的类。如何知道哪个bean被注入界面?

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

蚂蚁提示?

+0

如果你能得到的话,接口的目的就会丢失,对吗? – DNAj

+0

@DNAj我明白你的观点,但除此之外,我无法处理JSON转换(杰克逊),因为我使用的POJO包含应该由我的应用实现的接口。可以肯定的是,这里有一个设计问题,但是我不知道如何在不知道实现的类的情况下解决它。 – jfzr

+1

嗨@jfzr,那么你只有选择反射。通过正确使用反射,您还可以更改访问修饰符并使其可访问。让我知道你是否需要更多的信息。 – DNAj

回答

0

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

2

您可以使用反射让注入的实例告诉您它是什么实现类:injectedInstance.getClass().getName()。但是,除非你做了一些特别的事情,否则认为这是一种破解。您可能应该重新访问您的设计,以免不必这样做。

+0

确实,我认为这将是我解决这个设计问题时的部分解决方案。谢谢! – jfzr

1

你可以简单地自动装配的接口,并得到实现的类名:

@Autowired 
private Service service; 

System.out.println(service.getClass().getName()); 
同春豆

但是Spring容器已通常代理他们,所以它并不总是有益的,在课堂上面的例子是一个春天类叫做:

hello.HelloServiceImpl$$EnhancerBySpringCGLIB$$ad2e225d 

我怀疑你应该看看杰克逊串行应该处理这一切,看到Java - Jackson Annotations to handle no suitable constructor

相关问题