繁体   English   中英

将 spring beans 注入非托管 class

[英]Inject spring beans into a non-managed class

我有这个非托管 class,我想注入 spring bean(我不知道它们是什么)。 我怎样才能做到这一点?

例如,假设我有以下 class:

public class NonManagedClass extends APIClass {

  @Resource
  private Service1 service;

  @Resource
  private Service2 service2;

  // here i can declare many different dependencies

  @Resource
  private ServiceN serviceN;

  @Override
  public void executeBusinessStuffs() {
    // business logics
  }

}

我需要以某种方式让 spring 在我的 class 中注入这些依赖项。创建后我可以访问这些对象,因此我很容易调用可以实现此功能的任何方法。 例如:

@Service
public void SomeAPIService {

  @Resource
  private BeanInjector beanInjector; // I'm looking for some funcionality of spring like this

  public void someProcessingFunction(Class<? extends APIClass> clazz) throws Exception {
    APIClass instance = clazz.getConstructor().newInstance();
    beanInjector.injectBeans(instance);
    instance.executeBusinessStuffs();
  }

}

Spring 是否具有基于字段注释为非托管 class 注入 bean 的功能?

ApplicationContext替换BeanInjector就差不多了。 从那里你可以获得AutowireCapableBeanFactory ,它提供了一些方便的方法,如createBeanautowireBean

@Service
public void SomeAPIService {

  @Resource
  private ApplicationContext ctx;

  public void someProcessingFunction(Class<? extends APIClass> clazz) throws Exception {
    APIClass instance = ctx.createBean(clazz);
    instance.executeBusinessStuffs();
  }
}

或者如果你真的喜欢自己构建东西而不是使用容器:

@Service
public void SomeAPIService {

  @Resource
  private ApplicationContext ctx;

  public void someProcessingFunction(Class<? extends APIClass> clazz) throws Exception {
    APIClass instance = clazz.getConstructor().newInstance();
    ctx.getAutowireCapableBeanFactory().autowireBean(instance);
    instance.executeBusinessStuffs();
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM