如何从上下文中获取bean?

Posted

技术标签:

【中文标题】如何从上下文中获取bean?【英文标题】:How to obtain bean from context? 【发布时间】:2019-12-19 16:58:34 【问题描述】:

我有两个服务 A 和 B,A 在它的 pom 文件中有来自 B 的依赖。

在服务 B 中,我正在创建一个名为 ClassB 的类的 bean,在服务 A 中,我有一个名为 ClassA 的类,它在构造函数中接收来自其他服务的 ClassB 的实例作为参数。

即使我在运行这两个服务时在导入部分中指定来自其他服务的导入部分,我也会收到错误:

创建文件中定义的名称为“classA”的 bean 时出错 [something/ClassA.class]:不满足的依赖通过表达 构造函数参数 0;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 符合条件的 bean 类型 'something.something.something.something.something.ClassB' 可用: 预计至少有 1 个 bean 有资格作为 autowire 候选者。 依赖注释:

我不知道如何指定将类与其他服务的 bean 自动装配。

package .....;

import something.something.something.something.something.ClassB;

public class ClassA 

    private ClassB classB;

    @Autowired
    public ClassA(ClassB classB) 
        this.classB = classB;
    

    //More methods not relevant


感谢您的帮助!

【问题讨论】:

尝试使用 @Component 注释 ClassA 和 ClassB 你也可以在classA里面使用ApplicationContext来获取classB 【参考方案1】:

在您的@Configuration 类中创建一个用@Bean 注释的方法,该方法返回名为classB 的ClassB 实例,如下所示

@Configuration
public class YourConfigClass 

    ...
    .
    .
    @Bean
    public ClassB classB() 
        return new ClassB();
    
    .
    .
    ...

【讨论】:

以上是关于如何从上下文中获取bean?的主要内容,如果未能解决你的问题,请参考以下文章

如何在手动获取spring中的bean(Spring ApplicationContextAware获取上下文)

通过JSF中的JavaScript从bean获取更新值

如何在sitemesh装饰器中获取模型属性或spring的bean?

bean工厂和ApplicationContext

SpringBoot 获取上下文,获取bean的几种中方式

springboot整合applicationContext实现上下文获取实例bean