今天看spring官网的时候,提到了Ordered执行顺序。我当时记得@PostConstruct注解会在bean加载后执行,现在又来了一个执行顺序,直接给我整蒙了。
于是我写了一个简单的dom来看看,它是什么:
@Service("t2ServerImpl") //t1ServerImpl,t3ServerImpl省略。 public class t2ServerImpl implements Ordered, CommandLineRunner { int order = 1; public void print() { System.out.println("t2ServerImpl:" + order); } @Override public int getOrder() { return order; } @Override public void run(String... args) throws Exception { print(); } @PostConstruct public void init() { System.out.println("t2ServerImpl init"); } }
启动springBoot打印如下:
后来我改了t1ServerImpl为t4ServerImp,结果它是最后加载。
加载很有意思,应该是我这个没有依赖别的bean,所以就按照顺序加载了。
如果我这样:
我在t2中依赖t4。
这个时候t4就最先加载:
说完加载问题,我们来看看 Ordered执行顺序问题,这三哥类中都实现了CommandLineRunner接口的run方法,也就是说加载完毕后,回去执行run方法。
这个时候Ordered就可以控制这三个类的执行顺序。
t2ServerImpl:1
t4ServerImpl:2
t3ServerImpl:3直接使用@Order效果也是一样的: