[英]Spring Step Scoped beans do not respect @Order annotation
當我使用@StepScope
創建 2 個 bean 並應用@Order
時,兩個 bean 的順序仍然會在嘗試將它們自動裝配為列表時解析為Ordered.LOWEST_PRECEDENCE
。
@Bean
@Order(1)
@StepScope
public MyBean bean1(
return new MyBean("1");
}
@Bean
@Order(2)
@StepScope
public MyBean bean2(
return new MyBean("2");
}
查看OrderComparator
我看到 bean 被解析為ScopedProxyFactoryBean
的源,它返回 null 訂單值。 想知道我是否在這里做錯了什么,因為我希望訂購能夠正常工作。
因此,旨在將有序列表自動裝配到另一個 bean 中,例如
@Component
public class OuterBean {
private List<MyBean> beans;
public OuterBean(List<MyBean> beans) {
this.beans = beans;
}
}
我希望該列表包含{bean1,bean2}
步驟范圍的 bean 需要在運行步驟的 scope 中使用。 這是一個例子:
import java.util.List;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
@Configuration
public class MyJob {
@Bean
@Order(1)
@StepScope
public MyBean bean1() {
return new MyBean("1");
}
@Bean
@Order(2)
@StepScope
public MyBean bean2() {
return new MyBean("2");
}
@Bean
public OuterBean outerBean(List<MyBean> beans) {
return new OuterBean(beans);
}
@Bean
public Tasklet tasklet(OuterBean outerBean) {
return (contribution, chunkContext) -> {
outerBean.sayHello();
return RepeatStatus.FINISHED;
};
}
@Bean
public Job job(JobBuilderFactory jobs, StepBuilderFactory steps) {
return jobs.get("job")
.start(steps.get("step")
.tasklet(tasklet(null))
.build())
.build();
}
}
完整的代碼可以在這里找到。 此示例打印:
bean = 1
bean = 2
這意味着步驟范圍的 bean 已以正確的順序注入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.