@PostConstruct是一种初始化方法。以下面的代码为例。TestController中的成员变量testService被@Autowired修改。TestService将注入@ComponentpublicclassTestService{publicTestService(){System.out.println("TestServiceconstruct");}publicvoidinit(){System.out.println("TestServiceinit");}}@RestControllerpublicclassTestController{@AutowiredprivateTestServicetestService;publicTestController(){System.out.println("TestController构造");测试服务.init();}}这时候启动Spring应用就会报错。原因是testService在执行TestController构造方法时还没有完成初始化和注入;这种写法会出问题;这时候可以使用@PostConstruct来解决Causedby:java.lang.NullPointerException:nullatcom.example.demo.my.view.TestController.(TestController.java:20)~[classes/:na]atjava.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)~[na:na]atjava.base/jdk.internal.reflect.NnativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)~[na:na]在java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)~[na:na]在java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)~[na:na]调整代码后@RestControllerpublicclassTestController{@AutowiredprivateTestServicetestService;publicTestController(){System.out.println("TestController构造");}@PostConstructpublicvoidinitBeforeConstruct(){System.out.println("TestControllerPostConstruct");测试服务.init();}}这时候开始输出结果,从中可以看到整体的执行顺序构造方法@Autowird@PostConstruct