如何在 Spring Boot 中使用应用程序上下文获取 Bean

我正在开发一个SpringBoot项目,我想使用.我已经尝试了许多来自网络的解决方案,但无法成功。我的要求是我有一个控制器applicationContext

ControllerA

在控制器内部,我有一种方法 。我想获取注册豆的实例。我有休眠实体,我想通过在方法中传递类的名称来获取bean的实例。getBean(String className)getBean

如果有人知道解决方案,请提供帮助。


答案 1

您可以将应用程序上下文自动连线,也可以作为字段

@Autowired
private ApplicationContext context;

或方法

@Autowired
public void context(ApplicationContext context) { this.context = context; }

最后使用

context.getBean(SomeClass.class)

答案 2

您可以使用 ApplicationContextAware

应用环境感知

接口将由任何希望通知运行它的应用程序上下文的对象实现。例如,当一个对象需要访问一组协作 Bean 时,实现此接口是有意义的。

有几种方法可以获取对应用程序上下文的引用。您可以实现 ApplicationContextAware,如以下示例所示:

package hello;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
 
@Component
public class ApplicationContextProvider implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    } 

 public ApplicationContext getContext() {
        return applicationContext;
    }
    
}

更新:

Spring实例化bean时,它会寻找AppplicationContextAware实现,如果找到它们,将调用setApplicationContext()方法。

通过这种方式,Spring设置了当前的应用环境。

来自Spring的代码片段:source code

private void invokeAwareInterfaces(Object bean) {
        .....
        .....
 if (bean instanceof ApplicationContextAware) {                
  ((ApplicationContextAware)bean).setApplicationContext(this.applicationContext);
   }
}

一旦你获得了对应用程序上下文的引用,你就可以使用getBean()获取任何你想要的bean。


推荐