我想在一个遗留应用程序中使用Spring。
核心部分是一个类,我们称之为LegacyPlugin,它代表应用程序中的一种可插拔的组件。问题是这个类也是数据库连接器,并且被用来创建许多其他对象,通常是通过构造函数注入...
我想从LegacyPlugin启动一个ApplicationContext,并通过BeanFactory将其注入到ApplicationContext中,例如创建其他对象。然后代码将被重写,使用setter注入等方法。
我想知道实现这一点的最佳方法是什么。到目前为止,我有一个使用ThreadLocal来保存当前正在执行的插件的静态引用的BeanFactory的工作版本,但我觉得它很丑陋...
下面是我想要最终得到的代码:
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>