被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,並且只會被服務器執行一次。PostConstruct在構造函數之後執行,init()方法之前執行。PreDestroy()方法在destroy()方法知性之後執行。
@PostConstruct註解的方法將會在依賴注入完成後被自動調用。
舉個例子:
有一個service:
@Service
public class PostConService {
public PostConService() {
System.out.println("service 無參構造器");
}
public void echoService() {
System.out.println("PostConService method : echService");
}
}
一個controller
@RestController
public class PostConController {
@Autowired
PostConService conService;
public PostConController() {
System.out.println("controller 無參構造器:");
System.out.println("controller 無參構造器:conService:" + conService);
}
@PostConstruct
public void init() {
System.out.println("controller init method,conService:" + conService);
}
}
serviec注入到controller中,當spring容器啓動時,加載順序(打印順序)如下:
controller 無參構造器:
controller 無參構造器:conService:null
service 無參構造器
controller init method,conService:cn.edu.bjfu.service.PostConService@4212a0c8
即在init方法中,service即初始化完成
總體來說,順序如下:Constructor >> @Autowired >> @PostConstruct