java - Spring @Configuration 中的 Spring 原型(prototype) bean 引用

标签 java xml spring spring-annotations

我通过以下页面在 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”。

  1. 如何将 Foo 始终设置为 FooRepository 的新实例 FooRepository 已创建?
  2. Foo 的实例应来自 XML 文件。

最佳答案

您需要从 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));
    }
}

关于java - Spring @Configuration 中的 Spring 原型(prototype) bean 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29838921/

相关文章:

java - 如何为 stanford tagger 创建自己的训练语料库?

java - 在控制层编写决策语句

java - 使用 JAX-RPC 时如何将错误请求放入死信队列?

xml - Postgresql 9.2 xml命名空间前缀错误

java - 如何用 Java 编写这个用 C# 编写的逻辑? C#中的返回值类型有哪些?

java - while循环(检查键盘输入的是否不是int,然后不断询问,直到插入int)

xml - xpath xsl 查找父级的属性等于值

c# linq to xml 列表

java - Spring MVC 找不到映射错误

java - 更新依赖于其他实体状态的@Entity 字段的正确方法