@Required不在春天工作?

时间:2017-11-22 09:33:14

标签: java spring javabeans

我是以错误的方式使用它,还是@Required无效?

这里我使用@Required注释了bean Non setter,但app正常启动并打印“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());

        };
    }


}

1 个答案:

答案 0 :(得分:0)

您通过Non关键字实例化了new类,因此Spring无法专门应用其后处理器(RequiredAnnotationBeanPostProcessor)并验证其值字段。

作为旁注,@Required注释可能在Java配置的Spring应用程序中没有意义,除非另有说明,否则所有bean都是隐式需要的。

你没有描述" req"字符串应该来自,但如果它在启动时可用,您可以利用@Value机制:

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

    public String getReq() {
        return req;
    }
}