Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring找不到由注释生成的bean_Java_Spring_Inversion Of Control_Spring 3 - Fatal编程技术网

Java Spring找不到由注释生成的bean

Java Spring找不到由注释生成的bean,java,spring,inversion-of-control,spring-3,Java,Spring,Inversion Of Control,Spring 3,我想从spring上下文中检索属于某个类或子类的所有bean。但这只检测由xml专门定义的bean。此处未检测到由注释(如@services)定义的bean。尽管在应用程序内部,它们被完美地检测、初始化和自动连接 GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("*-context.xml"); Map<String, DataUpdater> beans = ctx.getBeansOfType

我想从spring上下文中检索属于某个类或子类的所有bean。但这只检测由xml专门定义的bean。此处未检测到由注释(如@services)定义的bean。尽管在应用程序内部,它们被完美地检测、初始化和自动连接

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

我也遇到过类似的问题,但我从未让getBeansOfType正常工作。我的解决方案:

@Autowired
public void setMyClasses( List<MyClass> beans ) {
    ...
}
Spring将以某种方式收集列表并将其注入。如果不需要知道何时注入列表,也可以将其作为字段注入:

@Autowired
private List<MyClass> beans;

您还必须在中搜索您的bean

AnnotationConfigApplicationContext
如果要在XmlContext和AnnotationContext中进行搜索,则必须将它们与

 @ImportResource("classpath:xmlcontext.xml")
在注释配置中


或者,您可以尝试实现ApplicationContextAware接口,并在它提供的上下文中进行搜索。

抱歉,出现了一些愚蠢的错误。。。我没有正确加载我的xml文件,但是被实例化为某个后台进程的bean正在使用正确的文件创建一个并行xml上下文。

你的*-context.xml文件是否有元素?是的,我有一个组件扫描。并且在构造函数方法中,每次打印都会检测到带注释的类,并在setter方法中每次打印都会实例化这些类,然后自动连接到其他bean。但我无法从外部世界获取它们。您尝试在XmlApplicationContext中精确搜索bean,但此上下文仅包含在此xml中声明的bean。必须在AnnotationConfigApplicationContextJConfig.class中搜索@AlexeySviridov,不,我不需要annotationConfigApplicationContext,因为我实例化bean的主要来源是xml文件。但是xml组件扫描文件中的一些bean正在实例化其他bean和那些我似乎找不到的二级bean。@flybywire,哦,我现在明白了。无论如何,我认为你的问题有些——你只在一个只包含定义在其中的bean的上下文中搜索。但您必须在某个全局应用程序上下文中进行搜索,该上下文包含您定义的所有解析bean。见我编辑的答案