我浏览了下面的页面,用Java引导一个applicationContext.xml。
http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch06.html
我的applicationContext有如下内容:
<beans>
<bean id="foo" class="com.mypackage.Foo" scope="prototype">
</bean>
</beans>
我需要引用Java中的"foo“,如下所示:
@Configuration
@AnnotationDrivenConfig
@ImportXml("classpath:applicationContext.xml")
public class Config {
@Autowired Foo foo;
@Bean(name="fooRepository")
@Scope("prototype")
public FooRepository fooRepository() {
return new JdbcFooRepository(foo);
}
}
我正在创建FooRepository的引用如下:
ApplicationContext ctx =
new AnnotationConfigApplicationContext(Config.class);
FooRepository fr = ctx.getBean("fooRepository", FooRepository.class);
每次我调用它时,我都会得到一个新的FooRepository实例,它被定义为"prototype“,这对我来说很好。
但是,当返回FooRepository实例时,我看到使用的是"foo“实例,但是XML文件中的"foo”是"prototype“。
发布于 2015-04-24 05:05:11
您需要从xml中删除Foo
条目。你可以这样定义它。
@Configuration
@AnnotationDrivenConfig
@ImportXml("classpath:applicationContext.xml")
public class Config {
@Bean(name = "fooRepository")
@Scope("prototype")
public FooRepository fooRepository() {
return new JdbcFooRepository(foo());
}
@Bean(name = "foo")
@Scope("prototype")
public Foo foo() {
return new foo();
}
}
方法2:您可以引用这个SO Answer
。
@Configuration
@AnnotationDrivenConfig
@ImportXml("classpath:applicationContext.xml")
public class Config {
@Autowired
private ApplicationContext context;
@Bean(name = "fooRepository")
@Scope("prototype")
public FooRepository fooRepository() {
return new JdbcFooRepository(context.getBean("foo", Foo.class));
}
}
发布于 2015-04-24 05:00:13
第一方法:
Foo也应该是一个原型。
第二种方法:
@Configuration
@AnnotationDrivenConfig
@ImportXml("classpath:applicationContext.xml")
public class Config {
@Bean(name = "fooRepository")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public FooRepository fooRepository(Foo foo) {
return new JdbcFooRepository(foo);
}
}
https://stackoverflow.com/questions/29838921
复制相似问题