从类名中检索类的实例

时间:2015-10-13 08:22:47

标签: java spring reflection

我正在创建一个程序,它使用反射来注册一些带注释的接口并存储类名以供后者使用。我可以很容易地检索带注释的类但是知道我的问题是:假设这些接口中的每一个都被实例化为单例,是否可以从类名中检索类的实际实例?请注意我已经知道如何实例化一个新的对象。但我可以得到一个已经存在的吗?我已经谷歌搜索了一段时间,我只发现了Class.forName()方法,我认为这不是我想要的(虽然可能是错的)。在我的项目中,我也使用Spring,所以我也对Spring解决方案持开放态度。任何帮助都非常感谢。

谢谢!

编辑:这就是我获取带注释的类的方法:

ClassPathScanningCandidateComponentProvider componentProvider = new ClassPathScanningCandidateComponentProvider(false);
    componentProvider.addIncludeFilter(new AnnotationTypeFilter(AuraInput.class));
    componentProvider.addIncludeFilter(new AnnotationTypeFilter(AuraOutput.class));
    for(BeanDefinition bd : componentProvider.findCandidateComponents("com")){
        System.out.println("Interface: " + bd.getBeanClassName());

//The if checks if the class it's an instance of InputInterface

if(InputInterface.class.isAssignableFrom(Class.forName(bd.getBeanClassName()))) 

//Here I want to call a method of InputInterface which gives back a string... But how do I get the actual object assuming I have the class name?

System.out.println(((InputInterface) Class.forName(bd.getBeanClassName())).getInterfaceName());

1 个答案:

答案 0 :(得分:1)

只需查询Spring应用程序上下文,例如ListableBeanFactory.html#getBeansOfType。关于单身人士也有类似的问题:How can I get a list of instantiated beans from Spring?