解决办法
通过 @DependsOn 注解来设置 spring bean 加载顺序,它可以指定依赖哪个 bean ,让自己在该 bean 之后加载。这样就可以实现 bean 顺序的设置。
ErlangNode 类依赖 ErlangConfig 、DeviceConfig 类,需要在 ErlangConfig 、DeviceConfig加载完成后执行:
@DependsOn 可以指定多个 bean ,用 String[] 表示,有顺序。@DependsOn({"erlangConfig", "deviceConfig"}) 表示在执行 ErlangNode.java 之前,会首先执行 ErlangConfig.java,然后再执行 DeviceConfig.java。bean 名称默认为 首字母小写的类名。
总结
@Configuration、 @Service、 @Component 都会将修饰的类交给 spring 来管理,但就注解这个层面来说,貌似是没有加载顺序的。默认为 包名+文件名 来判断加载顺序。如果需要指定加载顺序,可以使用 @DependsOn 注解。