Spring 中Bean 的this 呼叫

2021-10-10 12:44:08 字數 862 閱讀 9672

在我們使用spring時,可能有前輩教導過我們,在bean中不要使用this來呼叫被@async、@transactional、@cacheable等註解標註的方法,this下註解是不生效的。

那麼大家可曾想過以下問題

為何致this呼叫的方法,註解會不生效

這些註解生效的原理又是什麼

如果確實需要呼叫本類方法,且還需要註解生效,該怎麼做?

**是否可以做到this呼叫註解就直接生效?

以@async註解為例,@async註解標記的方法,在執行時會被aop處理為非同步呼叫,呼叫此方法處直接返回,@async標註的方法使用其他執行緒執行。

使用spring boot驅動

@enableasync

public class starter

}@component

public class asyncservice

@async

public void async2()

}@runwith(springrunner.class)

@springboottest(classes = starter.class)

public class basetest }

輸出內容為:

1:main

2:main

2:******asynctaskexecutor-2

第一行第二行對應async1()方法,第三行對應async2()方法,可以看到直接使用asyncservice.async2()呼叫時使用的執行緒為******asynctaskexecutor,而在async1()方法中使用this呼叫,結果卻是主線程,原呼叫執行緒一致。這說明@async在this呼叫時沒有生效。

Spring中Bean的配置

以下面的xml檔案舉例 第乙個bean的名稱為role,第二個bean的名稱為medicine,第三個bean的名稱為spring.chapter.mary.poison,第四個bean的名稱為spring.chapter.mary.poison 1 id和name的區別如下 id屬性具有唯一性,每...

spring中bean的建立

問題 1 bean 的建立時機 bean 是在什麼時候被建立的,有哪些規則?容器初始化的時候會預先對單例和非延遲載入的物件進行預先初始化。其他的都是延遲載入是在第一次呼叫getbean 的時候被建立。從 defaultlistablebeanfactory 的 preinstantiatesingl...

Spring中bean的含義

我個人的理解,覺得bean就相當於定義乙個元件,這個元件是用於具體實現某個功能的。這裡的所定義的bean就相當於給了你乙個簡潔方便的方法來呼叫這個元件實現你要完成的功能。對於我們的spring最主要的應該就是由這些bean組成的bean工廠,每個bean實現乙個功能 例如 你寫的第乙個bean id...