是否可以在 Spring 中设置实例化顺序?
我不想使用 @DependsOn
也不想使用 Ordered
接口。我只需要一个实例化顺序。
@Order
注释的以下用法不起作用:
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
/**
* Order does not work here
*/
public class OrderingOfInstantiation {
public static class MyBean1 {{
System.out.println(getClass().getSimpleName());
}}
public static class MyBean2 {{
System.out.println(getClass().getSimpleName());
}}
@Configuration
public static class Config {
@Bean
@Order(2)
public MyBean1 bean1() {
return new MyBean1();
}
@Bean
@Order(1)
public MyBean2 bean2() {
return new MyBean2();
}
}
public static void main(String[] args) {
new AnnotationConfigApplicationContext(Config.class);
}
}
Bean 仍然按字典顺序实例化。
为什么它在这里不起作用?
无论如何我可以依赖字典顺序吗?
更新
我想要任何允许提供创建顺序的解决方案。
目标是以正确的顺序在配置级别填充集合。 Depends on
与任务不匹配。关于为什么 Spring 不喜欢有序实例化的任何“解释”——也不符合任务。
订单意味着订单:)
原文由 Dims 发布,翻译遵循 CC BY-SA 4.0 许可协议
来自
@Order
javadoc所以我想 Spring 在创建 bean 时并没有遵循
@Order()
。但是,如果您只想填充集合,也许这对您来说已经足够了:
它不会改变实例化顺序,但你会得到有序的集合。