1. 程式人生 > 其它 >Spring初始化Bean生命週期

Spring初始化Bean生命週期

獲取class資訊 -> 根據class資訊呼叫構造方法建立物件 -> 判斷成員變數中是否有依賴注入註解並進行注入操作 -> 初始化前(@PostConstruct) -> 初始化後(實現InitializingBean介面)

  1. 判斷類中成員變數是否有指定註解
    可以利用反射獲取類資訊, 如獲取類中所有的方法資訊,然後根據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,然後呼叫介面方法即可。