Java Spring找不到由注释生成的bean
我想从spring上下文中检索属于某个类或子类的所有bean。但这只检测由xml专门定义的bean。此处未检测到由注释(如@services)定义的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
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。见我编辑的答案