2017-11-22 11 views
1

これを間違った方法で使用していますか?または@必須ですか?@春には働いていない必要がありますか?

ここでは、Bean Non setterに@Requiredというアノテーションを付けましたが、アプリは正常に起動し、「null」を出力します。

私はアプリがエラーを報告し、正しく起動しないと思います。

@SpringBootApplication 
public class ReqNotWorking { 

    public static void main(String[] args) { 
     SpringApplication.run(ReqNotWorking.class, args); 
    } 

    class Non{ 
     private String req; 

     public String getReq() { 
      return req; 
     } 

     @Required 
     public void setReq(String req) { 
      this.req = req; 
     } 
    } 

    @Bean 
    public Non non(){ 
     Non non = new Non(); 
     //non.setReq("error"); 
     return non; 
    } 

    @Bean 
    public CommandLineRunner commandLineRunner(Non non){ 
     return args -> { 

      System.out.println(non.getReq()); 

     }; 
    } 


} 

答えて

0

あなたは春には(具体的には、RequiredAnnotationBeanPostProcessor)そのポストプロセッサを適用する方法がないので、newキーワードを経てクラスNonをインスタンス化し、フィールドの値を確認しています。

特記しない限り、@Required注釈)は、Java構成のSpringアプリケーションでは意味がありません。すべてのBeanが暗黙のうちに必要です。

あなたは「req」文字列がから来ることになっている場所を説明していませんでしたが、それは、起動時に利用できるならば、あなたは@Valueメカニズム活用できます

@Component 
static class Non { 
    @Value("${req.value}") 
    private String req; 

    public String getReq() { 
     return req; 
    } 
} 
+0

OKは - そう、Java用の代替するものです設定?私はInitializingBeanとアサーションについて知っています。 – bojanv55

+0

あなたはユースケースを説明していませんが、1つの提案が編集として追加されました。起動時に特定のプロパティが利用できない場合、アプリケーションはエラーで失敗します。 – kryger

関連する問題