2013-02-05 22 views
0

我想从我的spring上下文中检索具有某个类(或子类)的所有bean。但是这只能检测由xml特别定义的bean。在此处未检测到由注释定义的豆,如@Service。 (尽管在应用程序中它们被完全检测,初始化和自动装配)。Spring没有发现由注释生成的beans

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("*-context.xml"); 
Map<String, DataUpdater> beans = ctx.getBeansOfType(MyClass.class, true, true); 
// why are beans missing? 
+2

你的'* -context.xml'文件是否有''元素? –

+1

是的,我有一个组件扫描。并且注释类被检测,实例化(在构造函数方法中每次打印)并自动装配到其他bean(在setter方法中每次打印)。但我无法从外部世界获得他们。 – flybywire

+1

您尝试在XmlApplicationContext中精确搜索您的bean,但是此上下文仅包含在此xml中声明的bean。您必须在 中搜索AnnotationConfigApplicationContext(JConfig.class); –

回答

0

对不起,一些愚蠢的错误......我没有正确加载我的xml文件,但是,被实例化为一些后台进程的bean正在用正确的文件创建并行xml上下文。

-1

我见过类似的问题,我从来没有得到getBeansOfType()正常工作。我的解决方案:

@Autowired 
public void setMyClasses(List<MyClass> beans) { 
    ... 
} 

Spring将以某种方式收集列表并注入它。如果你不需要知道什么时候该列表被注入,也可以注入它作为一个字段:

@Autowired 
private List<MyClass> beans; 
-1

如果你想在XmlContext搜索您必须还搜索您的豆

AnnotationConfigApplicationContext 

和AnnotationContext您必须

@ImportResource("classpath:xmlcontext.xml") 

它们组合在注释配置

或者你可以尝试在其提供的Context中执行ApplicationContextAware接口和搜索。

相关问题