Ita*_*man 16 java spring dependency-injection
在我的程序中,我需要以编程方式配置ApplicationContext.具体来说,我有一个MyClass实例的引用,我想将它定义为一个名为"xxyy"的新bean.
public void f(MyClass mc, ApplicationContext ac) {
// define mc as the "xxyy" bean on ac ???
...
...
// Now retrieve that bean
MyClass bean = (MyClass) ac.getBean("xxyy");
// It should be the exact same object as mc
Assert.assertSame(mc, bean);
}
Run Code Online (Sandbox Code Playgroud)
BeanDefinition API让我指定新bean的类,因此它不适合我,因为我想指定实例.我设法找到了一个解决方案,但它花了两个额外的工厂bean,这似乎是太多代码用于这样一个目的.
是否有满足我需求的标准API?
小智 17
你可以使用这个上下文:
GenericApplicationContext mockContext = new GenericApplicationContext();
Run Code Online (Sandbox Code Playgroud)
有一个
mockContext.getBeanFactory().registerSingleton("name", reference);
Run Code Online (Sandbox Code Playgroud)
并将其插入真实环境中
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "real-context.xml" }, mockContext);
Run Code Online (Sandbox Code Playgroud)
这些课程是:
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
Run Code Online (Sandbox Code Playgroud)
ska*_*man 16
你需要跳过几个箍才能做到这一点.第一步是获取对上下文的底层BeanFactory实现的引用.这只有在您的上下文实现ConfigurableApplicationContext时才有可能,而大多数标准实现ConfigurableApplicationContext.然后,您可以将该实例注册为该Bean工厂中的单例:
ConfigurableApplicationContext configContext = (ConfigurableApplicationContext)appContext;
SingletonBeanRegistry beanRegistry = configContext.getBeanFactory();
beanRegistry.registerSingleton("xxyy", bean);
Run Code Online (Sandbox Code Playgroud)
您可以像这样将任何对象"插入"上下文.
| 归档时间: |
|
| 查看次数: |
18148 次 |
| 最近记录: |