将 bean 注入到 Spring 托管上下文之外的类中

新手上路,请多包涵

我是我公司产品之一的最终用户。它不太适合集成到 Spring 中,但是我能够获取上下文的句柄并按名称检索所需的 bean。但是,我仍然想知道是否可以将一个 bean 注入到这个类中,即使这个类不是由 Spring 本身管理的。

澄清:管理某个类 MyClass 的生命周期的同一个应用程序也在管理 Spring 上下文的生命周期。 Spring 对 MyClass 的实例一无所知,我想知道如何将实例提供给上下文,但不能在上下文本身中创建实例。

原文由 Spencer Kormos 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 550
2 个回答

你可以这样做:

 ApplicationContext ctx = ...
YourClass someBeanNotCreatedBySpring = ...
ctx.getAutowireCapableBeanFactory().autowireBeanProperties(
    someBeanNotCreatedBySpring,
    AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);

您可以在 YourClass 中使用 @Autowired 等来指定要注入的字段等。

原文由 David Tinker 发布,翻译遵循 CC BY-SA 2.5 许可协议

尽管 bean 的制造是外部的,但将 bean 引入 Spring 的一种方法是使用标记为 @Configuration bean 的辅助类,该 bean 具有实际创建实例的方法(标记为 @Bean )并通过 Spring 将其交回(此时进行属性注入和代理生成)。

我不太确定你需要什么范围;使用 prototype ,你会在每个地方得到一个新鲜的豆子。

 @Configuration
public class FooBarMaker {
    @Bean(autowire = Autowire.BY_TYPE)
    @Scope("prototype")
    public FooBar makeAFooBar() {
        // You probably need to do some more work in here, I imagine
        return new FooBar();
    }
}

您可以将制造所需的属性注入 @Configuration bean。 (我用它来创建一个接口的实例,其中要实例化的类的名称是在运行时定义的。)

原文由 Donal Fellows 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏