跟踪实现特定接口的所有类?

时间:2012-02-04 18:44:41

标签: java spring interface

很难解释我真正想要的东西。我有一个接口,它有一个方法getRuntimeInfo(),它为我提供了类的变量的所有运行时调试信息。我想查看实现此接口的所有类的列表。我正在使用Java和Spring。 我可以这样做的一种方法是从Spring Context获取所有bean并使用instanceof运算符进行检查。但我不希望这样做对明显的性能影响。我还有其他选择吗?

2 个答案:

答案 0 :(得分:13)

这个解决方案怎么样:

@Component
public class WithAllMyInterfaceImpls {

  @Autowire
  List<MyInterface> allBeansThatImplementTheMyInterface;

}

List仅填充一次(启动时),因此它不会对“正常”运行时性能产生重大影响。


评论:

  

你能解释一下你的代码

吗?

你知道Spring是一个IOC容器。 @Component告诉Spring它应该创建一个这个类的实例(一个所谓的 Spring Managed Bean )。 IOC还意味着Container负责注入对其他实例的引用(Spring Managed Beans)。 @Autowire(以及@Resource@Inject - 都做同样的事情)就是这样一个注释,告诉Spring这个字段应该由Spring填充。 Spring本身试图找出该字段应该填充的实例。 spring使用的默认技术是by type这意味着Spring检查字段的类型,并搜索匹配的bean。在你的情况下,它是一个通用列表 - 这有点特别。在这种情况下,Spring使用列表填充字段,其中元素都是与泛型类型匹配的bean。

答案 1 :(得分:2)

ApplicationContext中的getBeansOfType方法怎么样?它返回实现界面的bean的Map?

http://static.springsource.org/spring/docs/1.2.x/api/org/springframework/beans/factory/ListableBeanFactory.html#getBeansOfType(java.lang.Class