2 回答

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個贊
我沒有NativeLoader.loadLibrary("my-lib")使用 spring 的生命周期鉤子,而是使用靜態(tài)上下文。
static {
? ? try {
? ? ? ? NativeLoader.loadLibrary("my-lib")
? ? } catch (IOException ex) {
? ? ? ? throw new ExceptionInInitializerError(ex);
? ? }
}
最主要的是使用ExceptionInInitializerError
它是為這種靜態(tài)上下文初始化而構(gòu)建的。
因此,當(dāng)使用時@MockBean,spring 確實(shí)在每個測試中運(yùn)行@PostConstruct(因?yàn)樗鼞?yīng)該清除模擬組件中的應(yīng)用程序上下文),但庫的加載只發(fā)生一次。

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個贊
嘗試延遲加載,以便僅在真正需要時(即在調(diào)用其某些方法之前)才有效加載庫。
1)根據(jù)邏輯的復(fù)雜性,將 bean 定義為 @Lazy 可以提供幫助。
2)如果這不是你的情況,手動實(shí)現(xiàn)延遲加載會有所幫助。例如,您可以使用代理,僅在第一次調(diào)用其中一個方法時才加載庫。
3) 可能需要對應(yīng)用程序的邏輯進(jìn)行一些修改,以推遲加載庫的代碼的使用。
添加回答
舉報