Spring初始化Bean生命週期
阿新 • • 發佈:2022-05-24
獲取class資訊 -> 根據class資訊呼叫構造方法建立物件 -> 判斷成員變數中是否有依賴注入註解並進行注入操作 -> 初始化前(@PostConstruct) -> 初始化後(實現InitializingBean介面)
- 判斷類中成員變數是否有指定註解
可以利用反射獲取類資訊, 如獲取類中所有的方法資訊,然後根據isAnnotationPresent
方法來獲取方法上是否標識指定註解
如以下所示
首先定義了一個class類 在類中有一個方法標識PostConstruct
註解
@Component public class User { private Integer id; private String username; private String password; private Integer age; @PostConstruct public void helloWorld() { System.out.println("Hello world!"); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } ··· 之後利用獲取user物件的class類中的所有方法,挨個遍歷判斷是否有`PostConstruct`註解 ```java for (Method method : user.getClass().getMethods()) { if (method.isAnnotationPresent(PostConstruct.class)) { System.out.println(method); } }
最終輸出為
PostConstruct註解
PostConstruct註解是在初始化前執行的 判斷方法是否有該註解可以根據以上方法進行判斷,之後利用反射呼叫方法即可
實現InitializingBean介面
通過實現該介面來呼叫初始化後的方法,判斷物件是否實現了該介面可以使用instanceof來判斷,如果實現了該介面直接將物件強轉為InitializingBean,然後呼叫介面方法即可。