如何在 Spring Java 配置中将多个对象注册为 beans?

How to register many object as beans in Spring Java Config?

我想将多个对象动态注册为 Spring bean。如果没有 BeanFactoryPostProcessor?

是可能的
@Configuration public class MyConfig {

    @Bean A single() { return new A("X");}

    @Bean List<A> many() { return Arrays.asList(new A("Y"), new A("Z"));}

    private static class A {

        private String name;

        public A(String name) { this.name = name;}

        @PostConstruct public void print() {
            System.err.println(name);
        }
    }
}

实际输出显示只有一个 bean 在工作:

X

预计:

X Y Z

Spring 4.3.2.RELEASE

我想要的是不可能的,但用 https://jira.spring.io/browse/SPR-13348

请求

如果你觉得多bean注册还可以,请点赞

您应该使用参数

指定 A bean 定义类型的原型
@Configuration
public class MyConfig {

    @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    A template(String seed) {
        return new A(seed);
    }

    @Bean
    String singleA() {
        return "X";
    }

    @Bean
    List<A> many() {
        return asList(template("Y"), template("Z"));
    }

    private static class A {

    }

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
        A a = (A) context.getBean("template");
        System.out.println(a);
        List<A> l = (List<A>) context.getBean("many");
        System.out.println(l);
    }
}

prototype 范围允许 Spring 在每次 template 执行时创建一个新的 A 并将实例注册到上下文中。

main执行结果如你所愿

Y
Z
MyConfig$A@15bfd87
[MyConfig$A@543e710e, MyConfig$A@57f23557]
X