gpt4 book ai didi

Spring : Injecting the object that launches the ApplicationContext into the ApplicationContext

转载 作者:行者123 更新时间:2023-12-02 02:20:43 27 4
gpt4 key购买 nike

我想在遗留应用程序中使用 Spring。

核心部分是一个类,我们称之为LegacyPlugin,它代表应用程序中的一种可插入部分。问题是这个类也是数据库连接器,并且用于创建许多其他对象,通常通过构造函数注入(inject)......

我想从LegacyPlugin启动一个ApplicationContext,并将其注入(inject)到ApplicationContext中(例如通过BeanFactory),以创建其他对象。然后代码将被重写,以使用 setter 注入(inject)等。

我想知道实现这一目标的最佳方法是什么。到目前为止,我有一个使用 BeanFactory 的工作版本,它使用 ThreadLocal 来保存对当前执行的插件的静态引用,但对我来说似乎很难看......

下面是我想要的代码:

public class MyPlugin extends LegacyPlugin {

public void execute() {
ApplicationContext ctx = new ClassPathXmlApplicationContext();
// Do something here with this, but what ?
ctx.setConfigLocation("context.xml");
ctx.refresh();
}

}
<小时/>
<!-- This should return the object that launched the context -->
<bean id="plugin" class="my.package.LegacyPluginFactoryBean" />

<bean id="someBean" class="my.package.SomeClass">
<constructor-arg><ref bean="plugin"/></constructor-arg>
</bean>

<bean id="someOtherBean" class="my.package.SomeOtherClass">
<constructor-arg><ref bean="plugin"/></constructor-arg>
</bean>

最佳答案

SingletonBeanRegistry 接口(interface)允许您通过其 registerSingleton 方法手动将预配置的单例注入(inject)到上下文中,如下所示:

ApplicationContext ctx = new ClassPathXmlApplicationContext();
ctx.setConfigLocation("context.xml");

SingletonBeanRegistry beanRegistry = ctx.getBeanFactory();
beanRegistry.registerSingleton("plugin", this);

ctx.refresh();

这会将 plugin bean 添加到上下文中。您不需要在 context.xml 文件中声明它。

关于 Spring : Injecting the object that launches the ApplicationContext into the ApplicationContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5478116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com