假設我們有一個簡單的@Configuration
:如何使用@Configuration的現有實例創建註釋配置的bean?
@Configuration
public class FooBarConfiguration {
@Bean
public Foo createFoo() {
return new FooImpl();
}
@Bean
@Autowired
public Bar createBar(Foo foo) {
return new BarImpl(foo);
}
}
這個類可以與AnnotationConfigApplicationContext
用於生產Foo
和Bar
實例:
final ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(FooBarConfiguration.class);
final Foo foo = applicationContext.getBean(Foo.class);
final Bar bar = applicationContext.getBean(Bar.class);
assertSame(foo, bar.getFoo());
在上面春天的例子將創建FooBarConfiguration
一個新實例,用它來製作Foos和酒吧。
現在假設我們已經有一個實例FooBarConfiguration
,我們希望通過Spring創建FOOS和酒吧,這種非常情況下。有沒有辦法做到這一點?
如何用配置對象的現有實例創建註釋配置的bean?
ps。隨着谷歌吉斯的解決方案很簡單:
public class FooBarConfiguration implements Module {
@Provides
@Singleton
public Foo createFoo() {
return new FooImpl();
}
@Override
public void configure(Binder binder) {
}
@Provides
@Inject
@Singleton
public Bar createBar(Foo foo) {
return new BarImpl(foo);
}
}
final FooBarConfiguration fooBarConfiguration = ...; // Our instance
final Injector injector = Guice.createInjector(fooBarConfiguration);
final Foo foo = injector.getInstance(Foo.class);
final Bar bar = injector.getInstance(Bar.class);
assertSame(foo, bar.getFoo());
您不需要'create_ar'上的'@ Inject'註釋。 – whiskeysierra 2010-07-14 22:02:49
對!以及Spring中的@Autowired示例。我比較新的基於註釋的配置,我主要是一個硬核舊的Spring XML配置的傢伙。 :) – lexicore 2010-07-14 22:12:44
爲什麼您需要使用配置類的現有實例而不是新配置?也許有另一種方式來達到你的目標... – meriton 2010-07-24 14:29:48