gpt4 book ai didi

spring boot 应用程序 - 从静态上下文中获取 bean

转载 作者:行者123 更新时间:2023-12-05 09:18:45 27 4
gpt4 key购买 nike

我有一个在 Spring 之外创建的类的实例,我想访问 Spring bean,以便它可以触发事件并被 Spring bean 观察到。我没有使用 Spring Web,我的应用程序是通过 Spring Boot 从命令行运行的。

最佳答案

您唯一的选择是使用静态方法公开应用程序的 Spring 上下文,以便不受 Spring 管理的对象可以使用它来获取对所需托管 bean 的引用。

  1. 从上下文的包装器开始。创建一个需要在其构造函数中引用上下文的常规托管 bean。该引用被分配给一个静态类字段,它也有一个静态 getter:

    @Service
    class ContextWrapper {

    private static ApplicationContext context;

    @Autowired
    public ContextWrapper(ApplicationContext ac) {
    context = ac;
    }

    public static ApplicationContext getContext() {
    return context;
    }

    }
  2. 使用静态 getter 访问不受 Spring 管理的对象中的上下文,并使用上下文中可用的方法获取对 bean 的引用:

    SomeBean bean = ContextWrapper.getContext().getBean("someBean", SomeBean.class);
    // do something with the bean
  3. 您最不需要的是从 Spring bean 到非托管对象的通信 channel 。例如,SomeBean 可以公开一个 setter,它将接受非托管对象作为参数并将引用存储在字段中以供将来使用。对象 mast 使用上面提到的静态上下文访问器获取对托管 bean 的引用,并使用 setter 使 bean 知道它的存在。

    @Service
    class SomeBean {

    // ... your bean stuff

    private SomeClass someclass;

    public void setSomeClass(Someclass someclass) {
    this.someclass = someclass;
    }

    private void sendEventToSomeClass() {
    // communicate with the object not managed by Spring
    if (someClass == null) return;
    someClass.sendEvent();
    }

    }

关于spring boot 应用程序 - 从静态上下文中获取 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43804407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com