【发布时间】:2013-01-20 13:38:25
【问题描述】:
我想从我的 spring 上下文中检索属于某个类(或子类)的所有 bean。但这仅检测由 xml 专门定义的 bean。由注解定义的 Bean,例如 @Service,在此处不会被检测到。 (尽管在应用程序内部,它们被完美地检测、初始化和自动装配)。
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("*-context.xml");
Map<String, DataUpdater> beans = ctx.getBeansOfType(MyClass.class, true, true);
// why are beans missing?
【问题讨论】:
-
您的
*-context.xml文件是否有<component-scan>元素? -
是的,我有一个组件扫描。并且带注释的类被检测、实例化(在构造方法中按打印)并自动连接到其他 bean(在 setter 方法中按打印)。但我无法从外界获得它们。
-
您尝试在 XmlApplicationContext 中准确搜索您的 bean,但此上下文仅包含在此 xml 中声明的 bean。必须在 AnnotationConfigApplicationContext(JConfig.class); 中搜索;
-
@AlexeySviridov,不,我不需要 annotationConfigApplicationContext,因为我用于实例化 bean 的主要来源是 xml 文件。但是 xml (compnent-scan) 文件中的一些 bean 正在实例化其他 bean 和那些我似乎找不到的“二级”bean。
-
@flybywire,哦,我现在明白了。无论如何,我认为您的问题有些 - 您在一个仅包含其中定义的 bean 的上下文中搜索。但是您必须在一些全局应用程序上下文中搜索,其中包含您定义的所有已解析 bean。即查看我编辑的答案
标签: java spring inversion-of-control spring-3