将 Bean 注入 Spring 托管上下文之外的类

2022-08-31 15:14:50

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

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


答案 1

您可以执行以下操作:

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

您可以使用 等 来 指定 要 注入 的 字段 等。@AutowiredYourClass


答案 2

将Bean带入Spring的一种方法是使用标记为Bean的帮助器类,该类具有实际制作实例的方法(标有)并通过Spring将其交还(此时进行属性注入和代理生成)。@Configuration@Bean

我不太确定你需要什么范围;有了 ,你会在每个地方得到一个新鲜的豆子。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();
    }
}

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


推荐