Spring boot里@Valueと@bean実行順序問題


Spring boot里@Valueと@bean実行順序問題
文書ディレクトリ
  • spring boot里@Valueと@bean実行順序問題
  • 前言
  • の場合1:異なるファイルの下で
  • の場合2:同じファイルの下で
  • @Valueの代わりにEnvironmentを使用し、プロファイル
  • を直接取得します.
    前言
    通常、@Beanは@Valueより先に実行されますが、@Beanと@Valueが同じファイルにないという条件があります.コントロールという先着順は次の3つのケースがあります.次のコードはkotlin言語を使用します.
    ケース1:異なるファイルの下
    2つのラベルが異なるファイルにある場合、@Beanは@Valueよりも先に実行されるため、@Value値が空の場合があります
    //Bean
    @Configuration
    class HessionRPCConfig  {
        @Bean
        fun helloClient(){
            System.out.print "globalData.RPCUrl:${globalData.RPCUrl}")
        }
    }
    
    //value
    class GlobalConfig {
    	@Value("\${globalData.RPCUrl}")
        private var RPCUrl:String = "";
    }
    

    ケース2:同じファイルの下
    では@Valueは@Beanより先に実行します
    @Configuration
    class HessionRPCConfig  {
    	@Value("\${globalData.RPCUrl}")
        private var RPCUrl:String = "";
      
        @Bean
        fun helloClient(){
            System.out.print "RPCUrl:${RPCUrl}")
        }
    }
    

    @Valueの代わりにEnvironmentを使用し、プロファイルを直接取得します.
    import org.springframework.core.env.Environment
    @Configuration
    class HessionRPCConfig  {
    	@Autowired
        private lateinit var env:Environment;
      
        @Bean
        fun helloClient(){
            System.out.print "RPCUrl:" + env.getProperty("globalData.RPCUrl"))
        }
    }