当前位置:  开发笔记 > 编程语言 > 正文

如何在spring boot中使用应用程序上下文获取bean

如何解决《如何在springboot中使用应用程序上下文获取bean》经验,为你挑选了3个好方法。

我正在开发一个SpringBoot项目,我想用它的名字来获取bean applicationContext.我已尝试过很多来自网络的解决方案,但无法成功.我的要求是我有一个控制器

ControllerA

在控制器内我有一个方法getBean(String className).我想获取已注册bean的实例.我有hibernate实体,我想通过仅在getBean方法中传递类的名称来获取bean的实例.

如果有人知道解决方案,请帮忙.



1> reos..:

您可以将ApplicationContext自动装配为字段

@Autowired
private ApplicationContext context;

或方法

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

最后用

context.getBean(SomeClass.class)


现场注入被认为是不好的做法.
只是google"Field vs Constructor injection".此外,Oliver Gierke(Spring Data Team领导)反对现场注入.
@luboskrnac:是的,很好奇为什么。

2> Sundararaj G..:

您可以使用ApplicationContextAware.

ApplicationContextAware:

接口由希望被通知ApplicationContext中,它运行英寸实现此接口有意义例如当对象需要访问一组协作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;
    }

}

更新:

春天实例豆,它查找了ApplicationContextAware实现,如果发现他们,()方法将被调用的setApplicationContext.

通过这种方式,Spring正在设置当前的 applicationcontext.

来自Spring的代码片段source code:

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

一旦获得对Application上下文的引用,就可以使用getBean()获取所需的bean.



3> Debendra Par..:

实际上,您想从Spring引擎中获取对象,该引擎已经在Spring应用程序启动时(Spring引擎的初始化)维护了所需类的对象。现在,您只需要将该对象获取到参考。

在服务班级

@Autowired
private ApplicationContext context;

SomeClass sc = (SomeClass)context.getBean(SomeClass.class);

现在,在sc的参考中,您具有该对象。希望解释得很好。如有任何疑问,请通知我。

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有