博客 / 詳情

返回

一個詭異的成員變量獲取問題

有這麼一個工具類

@Service
@Data
public class A {

public Client client;

@PostConstruct
public void init(){
    client = xxxxx;
}

}

在另一個類B中,注入該類並使用,是ok的。

a.client.xxx

某次提交後,就死活 a.client = null了,必須得 a.getClient() 方法得到。

發現是因為 A 中定義了一個方法,並用了 @Async 註解。

@Async 註解加上後, 另一個類 B 中 a 是一個 cglib 實現的被加強的代理對象,裏面的成員變量沒有被正確初始化,都是 null,只能通過 get 方法通過反射獲取到成員變量。

而沒有加上前,a 是一個普通的被 spring 容器管理的 bean,只有需要AOP增強功能時,才被代理。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.