2017-11-22 3 views
1

잘못된 방법으로 사용하고 있습니까? 아니면 @ 필수 항목이 효과가 있습니까?@ 봄에 근무하지 않아야합니까?

@ 비 필수 입력란에 Non Setter 주석을 달았지만 앱이 정상적으로 시작되고 "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 주석 (아마도)은 모든 bean이 암시 적으로 요구되는 Java 구성 Spring 응용 프로그램에서는 의미가 없습니다.

당신은 "req"문자열에서 온 생각되는 경우 설명하지 않았다, 그러나 시작시 사용할 수 있다면, 당신은 @Value 메커니즘을 활용할 수 있습니다 :

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

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

확인 - 그래서 자바의 대체 무엇인가 구성? InitializingBean에 대해 알고 있고 주장하고 있습니다. – bojanv55

+0

유스 케이스를 설명하지는 않았지만 하나의 제안이 편집으로 추가되었습니다. 지정된 속성을 시작할 때 사용할 수 없으면 응용 프로그램이 오류로 실패합니다. – kryger

관련 문제