将 Bean 注入 Spring 托管上下文之外的类
我是公司某款产品的最终用户。它不太适合集成到Spring中,但是我能够处理上下文并按名称检索所需的bean。但是,我仍然想知道是否有可能将bean注入到这个类中,即使该类不是由Spring本身管理的。
澄清:管理某个类MyClass的生命周期的同一应用程序也管理Spring上下文的生命周期。Spring对MyClass的实例一无所知,我想向上下文提供实例,但无法在上下文本身中创建实例。
我是公司某款产品的最终用户。它不太适合集成到Spring中,但是我能够处理上下文并按名称检索所需的bean。但是,我仍然想知道是否有可能将bean注入到这个类中,即使该类不是由Spring本身管理的。
澄清:管理某个类MyClass的生命周期的同一应用程序也管理Spring上下文的生命周期。Spring对MyClass的实例一无所知,我想向上下文提供实例,但无法在上下文本身中创建实例。
您可以执行以下操作:
ApplicationContext ctx = ...
YourClass someBeanNotCreatedBySpring = ...
ctx.getAutowireCapableBeanFactory().autowireBeanProperties(
someBeanNotCreatedBySpring,
AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);
您可以使用 等 来 指定 要 注入 的 字段 等。@Autowired
YourClass
将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