精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

@Async注解失效的九種場景

開發 前端
在Spring中要開啟@Async注解異步的功能,需要在項目的啟動類,或者配置類上,使用@EnableAsync注解。

前言

最近有粉絲問了我一個問題:他在項目某個方法使用@Async注解,但是該方法還是同步執行了,異步不起作用,到底是什么原因呢?

偽代碼如下:

@Slf4j
@Service
public class UserService {

    @Async
    public void async(String value) {
        log.info("async:" + value);
    }
}

這個問題還是比較有意思的,今天這篇文章總結了@Async注解失效的9種場景,希望對你會有所幫助。

圖片圖片

1 未使用@EnableAsync注解

在Spring中要開啟@Async注解異步的功能,需要在項目的啟動類,或者配置類上,使用@EnableAsync注解。

例如:

@EnableAsync
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@EnableAsync注解相當于一個開關,控制是否開啟@Async注解異步的功能,默認是關閉的。

如果在項目的啟動類上沒使用@EnableAsync注解,則@Async注解異步的功能不生效。

2 內部方法調用

我們在日常開發中,經常需要在一個方法中調用另外一個方法,例如:

@Slf4j
@Service
public class UserService {

    public void test() {
        async("test");
    }

    @Async
    public void async(String value) {
        log.info("async:{}", value);
    }
}

這個示例中,在UserService類中的test()方法中調用了async()方法。

如果在controller中@Autowired了UserService類的對象,調用了它的test()方法,則async()異步的功能會失效。

我們知道Spring通過@Async注解實現異步的功能,底層其實是通過Spring的AOP實現的,也就是說它需要通過JDK動態代理或者cglib,生成代理對象。

異步的功能,是在代理對象中增加的,我們必須調用代理對象的test()方法才行。

而在類中直接進行方法的內部調用,在test()方法中調用async()方法,調用的是該類原對象的async方法,相當于調用了this.async()方法,而并非UserService代理類的async()方法。

因此,像這種內部方法調用,@Async注解的異步功能會失效。

3 方法非public

在Java中有4種權限修飾符

  • public:所有類都可以訪問。
  • private:只能同一個類訪問。
  • protected:同一個類,同一個包下的其他類,不同包下的子類可以訪問。
  • 默認修飾符:同一個類,同一個包下的其他類可以訪問。

在實際工作中,我們使用頻率最高的可能是public和private了。

如果我在定義Service類中的某個方法時,有時把權限修飾符定義錯了,例如:

@Slf4j
@Service
public class UserService {

    @Async
    private void async(String value) {
        log.info("async:{}", value);
    }
}

這個例子中將UserService類的async()方法的權限修飾符定義成了private的,這樣@Async注解也會失效。

因為private修飾的方法,只能在UserService類的對象中使用。

而@Async注解的異步功能,需要使用Spring的AOP生成UserService類的代理對象,該代理對象沒法訪問UserService類的private方法,因此會出現@Async注解失效的問題。

4 方法返回值錯誤

我們在寫一個新的方法時,經常需要定義方法的返回值。

返回值可以是void、int、String、User等等,但如果返回值定義錯誤,也可能會導致@Async注解的異步功能失效。

例如:

@Service
public class UserService {

    @Async
    public String async(String value) {
        log.info("async:{}", value);
        return value;
    }
}

UserService類的async方法的返回值是String,這種情況竟然會導致@Async注解的異步功能失效。

在AsyncExecutionInterceptor類的invoke()方法,會調用它的父類AsyncExecutionAspectSupport中的doSubmit方法,該方法時異步功能的核心代碼,如下:

圖片圖片

從圖中看出,@Async注解的異步方法的返回值,要么是Future,要么是null。

因此,在實際項目中,如果想要使用@Async注解的異步功能,相關方法的返回值必須是void或者Future。

5 方法用static修飾了

有時候,我們的方法會使用static修飾,這樣在調用的地方,可以直接使用類名.方法名,訪問該方法了。

但如果在@Async方法上加了static修飾符,例如:

@Slf4j
@Service
public class UserService {

    @Async
    public static void async(String value) {
        log.info("async:{}", value);
    }
}

這時@Async的異步功能會失效,因為這種情況idea會直接報錯:Methods annotated with '@Async' must be overridable 。

使用@Async注解聲明的方法,必須是能被重寫的,很顯然static修飾的方法,是類的靜態方法,是不允許被重寫的。

因此這種情況下,@Async注解的異步功能會失效。

6 方法用final修飾

在Java種final關鍵字,是一個非常特別的存在。

用final修飾的類,沒法被繼承。

用final修飾的方法,沒法被重寫。

用final修飾的變量,沒法被修改。

如果final使用不當,也會導致@Async注解的異步功能失效,例如:

@Slf4j
@Service
public class UserService {

    public void test() {
        async("test");
    }

    @Async
    public  final void async(String value) {
        log.info("async:{}", value);
    }
}

這種情況下idea也會直接報錯:Methods annotated with '@Async' must be overridable 。

因為使用final關鍵字修飾的方法,是沒法被子類重寫的。

因此這種情況下,@Async注解的異步功能會失效。

7 業務類沒加@Service注解

有時候,我們在新加Service類時,會忘了加@Service注解,例如:

@Slf4j
//@Service
public class UserService {

    @Async
    public void async(String value) {
        log.info("async:{}", value);
    }
}

@Service
public class TestService {

   @Autowired
   private UserService userService;

    public void test() {
        userService.async("test");
    }
}

這種情況下,@Async注解異步的功能也不會生效。因為UserService類沒有使用@Service、@Component或者@Controller等注解聲明,該類不會被Spring管理,因此也就無法使用Spring的異步功能。

8 自己new的對象

在項目中,我們經常需要new一個對象,然后對他賦值,或者調用它的方法。

但如果new了一個Service類的對象,可能會出現一些意想不到的問題,例如:

@Slf4j
@Service
public class UserService {

    @Async
    public void async(String value) {
        log.info("async:{}", value);
    }
}

@Service
public class TestService {

    public void test() {
        UserService userService = new UserService();
        userService.async("test");
    }
}

在TestService類的test()方法中,new了一個UserService類的對象,然后調用該對象的async()方法。

很顯然這種情況下,async()方法只能同步執行,沒法異步執行。

因為在項目中,我們自己new的對象,不會被Spring管理,因此也就無法使用Spring的異步功能。

不過我們可以通過BeanPostProcessor類,將創建的對象手動注入到Spring容器中。

9 Spring無法掃描異步類

我們在Spring項目中可以使用@ComponentScan注解指定項目中掃描的包路徑,例如:

@ComponentScan({"com.susan.demo.service1"})
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

項目中com.susan.demo.service1這個路徑是不存在的,會導致@Async注解異步的功能失效。

同時如果@ComponentScan注解定義的路徑,沒有包含你新加的Servcie類的路徑,@Async注解異步的功能也會失效。

好了,今天的文章內容先到這里。

責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2024-06-18 08:37:25

場景異步編程代碼

2021-04-14 15:17:08

Transaction代碼語言

2023-09-28 09:07:54

注解失效場景

2020-04-14 13:32:56

@Transacti失效場景

2024-04-19 13:57:30

索引數據庫查詢

2024-09-09 08:29:25

2025-02-10 00:27:54

2021-09-04 07:56:44

Spring事務失效

2022-01-09 18:32:03

MySQL SQL 語句數據庫

2021-08-04 00:10:49

場景版本大文件

2023-07-05 08:45:18

Spring事務失效場景

2022-05-26 08:23:05

MySQL索引數據庫

2024-05-08 08:18:05

索引失效場景

2022-02-14 16:53:57

Spring項目數據庫

2024-12-17 00:00:00

Spring線程

2024-07-12 14:46:20

2024-06-19 19:17:04

2022-08-29 09:06:43

hippo4j動態線程池

2023-11-20 13:52:00

Redis數據庫

2020-10-09 06:52:31

設計模式軟件
點贊
收藏

51CTO技術棧公眾號

国产精品综合一区二区三区| 精品淫伦v久久水蜜桃| 国产精品久久一级| 91在线网站视频| 国产精品30p| 国产一区二区三区四区大秀| 538prom精品视频线放| 免费不卡av在线| www.黄在线观看| 91精品啪在线观看国产60岁| 99一区二区| 亚洲欧美另类在线视频| 日韩精品免费一区二区三区| 欧美成人综合网站| 免费av网址在线| 麻豆系列在线观看| 91浏览器在线视频| 亚洲综合精品一区二区| 欧美日韩综合一区二区三区| 亚洲高清影视| 亚洲香蕉成人av网站在线观看| 黑人无套内谢中国美女| 欧美三级精品| 亚洲成人资源在线| 中国老女人av| 97电影在线观看| 91免费看片在线观看| 99re视频在线播放| 一级黄色片在线| 亚洲欧美日韩精品一区二区| 久久6免费高清热精品| 日韩av片在线| 久久av电影| 亚洲国产成人久久综合| 99999精品| 色综合天天色| 色婷婷亚洲精品| 久久久久久久久久久99| av网站在线看| 亚洲视频你懂的| 亚洲欧美日韩综合一区| 国产一二在线观看| 久久一夜天堂av一区二区三区| 国产精品一区二区三区四区五区| 国产日韩免费视频| 久久99精品久久久久婷婷| 国产成人一区二| 成人毛片在线播放| 久久成人免费| 秋霞成人午夜鲁丝一区二区三区| 五月婷婷开心网| 亚洲经典视频在线观看| 久久免费精品视频| 中文字幕一区二区三区手机版| 国内自拍一区| 久久久久免费视频| 久草视频免费在线播放| 欧美日韩一区二区高清| 欧美黄色成人网| 日韩激情在线播放| 一区二区高清| 国产极品精品在线观看| 无码人妻精品一区二区三区蜜桃91| 米奇777在线欧美播放| 国产激情综合五月久久| 亚洲视频久久久| 久久福利视频一区二区| 成人久久一区二区| 精品人妻一区二区三区蜜桃| 国产成人一级电影| 精品久久久久久一区| 欧美高清成人| 中文字幕在线观看不卡视频| 免费观看国产视频在线| 影音先锋男人资源在线| 午夜精品久久久久久久久久久| 精品欧美一区免费观看α√| 性欧美gay| 欧美精品一二三四| 国产ts在线观看| 日韩有码中文字幕在线| 在线播放国产一区二区三区| 亚洲最大的黄色网址| 亚洲性图久久| 国产精品高潮呻吟久久av黑人| 这里只有久久精品视频| 国产毛片精品一区| 精品无人区一区二区三区竹菊| 国产在线视频福利| 亚洲人成在线观看一区二区| 霍思燕三级露全乳照| 日韩一级二级| 欧美成人官网二区| 中国美女乱淫免费看视频| 欧美gayvideo| 91国产视频在线播放| 在线观看国产精品入口男同| 国产99久久久久久免费看农村| 欧美一级日本a级v片| 精品国产99久久久久久| 欧美日韩另类在线| 三年中文在线观看免费大全中国| 青草久久视频| 美女av一区二区| 在线精品免费视| 国产成人在线视频网址| 日本一区二区三不卡| 午夜羞羞小视频在线观看| 欧洲国内综合视频| 最新中文字幕日本| 欧美电影《睫毛膏》| 97免费中文视频在线观看| 国产又黄又粗又硬| 久久影院午夜片一区| 久草免费福利在线| 国产成年精品| 色噜噜狠狠狠综合曰曰曰| 国产毛片aaa| 国产成人小视频| 在线不卡日本| 日韩在线免费| 日韩精品久久久久久久玫瑰园| 顶臀精品视频www| 美日韩一级片在线观看| 美女一区视频| 国模精品视频| 亚洲激情久久久| 波多野结衣不卡视频| 久久国产精品无码网站| 日韩一区国产在线观看| 中文字幕在线看片| 亚洲国产毛片完整版| 亚洲熟女www一区二区三区| 久久国产精品99精品国产 | 亚洲欧美变态国产另类| 久久久久久国产精品免费播放| 久久激情综合网| 日韩动漫在线观看| 成人福利视频| 国产丝袜视频一区| 久久久精品免费看| www.日韩精品| 青青草成人免费在线视频| 亚洲精品高潮| 午夜精品一区二区三区av| 不卡的日韩av| 亚洲午夜私人影院| 扒开伸进免费视频| 1000部精品久久久久久久久| 国产传媒欧美日韩| av在线中出| 亚洲精品97久久| 国产在线观看黄色| 久久久久久一级片| 狠狠操精品视频| 成久久久网站| 成人网页在线免费观看| 国产剧情在线| 精品91自产拍在线观看一区| 日韩 国产 在线| 久久精品一二三| 九九精品久久久| 欧美日韩国内| 狠狠综合久久av| 九九热线视频只有这里最精品| 亚洲老头同性xxxxx| 中国a一片一级一片| 日韩一区欧美小说| 三级网站免费看| 亚洲精品三级| 日本一区网站| av国产精品| 欧美极品美女电影一区| 亚洲日本香蕉视频| 在线观看亚洲精品| 少妇人妻丰满做爰xxx| 成人免费高清在线| 能在线观看的av| 久久美女视频| 国产精品久久久久免费| 三上悠亚国产精品一区二区三区| 中文字幕亚洲综合久久| 国产绳艺sm调教室论坛| 午夜精品福利久久久| 久久只有这里有精品| 国产一区日韩二区欧美三区| 精品丰满人妻无套内射| 精品国产一级毛片| 99在线国产| 78精品国产综合久久香蕉| 久热精品视频在线观看一区| 欧美一级一区二区三区| 欧美日韩精品一区二区| 日韩男人的天堂| 国产精品网曝门| 妖精视频一区二区| 琪琪一区二区三区| 无码中文字幕色专区| 日韩精品影视| 国模一区二区三区私拍视频| 久久婷婷五月综合色丁香| 久久久久久这里只有精品| 99青草视频在线播放视| 亚洲精品国精品久久99热| 亚洲在线免费观看视频| 婷婷中文字幕综合| 翔田千里88av中文字幕| 91网上在线视频| 农村末发育av片一区二区| 奇米影视一区二区三区| www黄色日本| 欧美激情第二页| 亚洲精品免费在线看| 亚洲最大在线| 国产另类自拍| 国产欧美日韩电影| 国产精品色视频| 午夜日韩成人影院| 国产91精品久久久久久| 七七成人影院| 久热精品视频在线| 日本不卡在线| 自拍偷拍亚洲在线| 精品亚洲综合| 亚洲精品中文字幕女同| 六月婷婷综合网| 欧美一级高清片| 一区二区三区亚洲视频| 欧洲国内综合视频| 日本视频在线观看免费| 欧美视频裸体精品| 日本熟妇乱子伦xxxx| 亚洲午夜精品在线| 久久综合综合久久| 亚洲精品国产一区二区三区四区在线| 久久视频一区二区三区| 国产日韩综合av| 91成人破解版| 国产午夜精品一区二区三区视频 | 女人和拘做爰正片视频| 亚洲高清毛片| 国产69精品久久久久久久| 亚洲欧洲日本mm| 91免费黄视频| 亚洲最黄网站| aa免费在线观看| 亚洲欧美日韩在线观看a三区 | 日韩伦理在线一区| 国产69精品久久久久99| 精品捆绑调教一区二区三区| 国色天香2019中文字幕在线观看| 美洲精品一卡2卡三卡4卡四卡| 久久99久久99精品免观看粉嫩| yellow91字幕网在线| 国产精品嫩草99a| 国产在线观看h| 国产欧美日韩精品一区| 中文字幕免费在线看线人动作大片| 久久综合九色综合欧美就去吻 | 欧美国产成人精品| 少妇精品无码一区二区免费视频 | 日韩一区二区电影在线观看| 日本大胆欧美| 青青草免费在线视频观看| 在线观看日韩| 69sex久久精品国产麻豆| 亚洲黄色三级| 青青青在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅| 99热这里只有精品在线播放| 久久99精品久久久久久国产越南 | 久久视频在线看| 新版中文在线官网| 国产91精品久| 精品176极品一区| 国产二区不卡| 九九免费精品视频在线观看| 亚洲精品中字| 欧美日本国产| 无码人妻精品一区二区蜜桃网站| 国产日韩综合| 欧美女同在线观看| 成人午夜电影久久影院| 爱爱的免费视频| 国产精品伦理一区二区| 久久久精品99| 欧美中文字幕不卡| 99精品免费观看| 日韩av综合网站| 麻豆视频在线免费观看| 久久久亚洲欧洲日产国码aⅴ| 欧美黑人粗大| 91在线无精精品一区二区| 色天天色综合| 一区二区精品在线| 亚洲三级影院| 性欧美在线视频| 91亚洲精品久久久蜜桃| 中文字幕第69页| 精品动漫一区二区| 国产精品国产av| 亚洲精品午夜精品| 日本在线视频www鲁啊鲁| 国产精品精品久久久久久| 日韩一二三区| 亚洲成人午夜在线| 亚洲永久网站| 粗大的内捧猛烈进出视频| 国产欧美日韩综合精品一区二区| 国产午夜福利一区二区| 欧美日韩中字一区| 天堂网2014av| 欧美极品美女电影一区| 四虎在线精品| 日韩高清专区| 国产欧美一级| 国产艳妇疯狂做爰视频 | 亚洲精品国产免费| www.在线视频| 国产玖玖精品视频| 久久99视频| 男人日女人下面视频| 国产成人在线观看| 加勒比婷婷色综合久久| 欧美三级中文字幕在线观看| 深夜福利免费在线观看| 久久久久久久网站| 爱情电影网av一区二区| 视频一区免费观看| 视频精品一区二区| 亚洲色图14p| 午夜精品福利久久久| 国产 欧美 自拍| 欧美激情精品久久久久久黑人| 亚洲视频资源| 一区二区三区在线视频看| 日韩黄色小视频| 成年人网站免费在线观看| 精品国产乱码久久久久酒店 | 国产一区二区三区丝袜| 中文在线免费视频| 久久亚洲高清| 校园激情久久| 蜜桃传媒一区二区亚洲av| 日韩人在线观看| 蜜桃视频在线观看网站| 日韩av手机在线| 国产不卡av一区二区| 国产裸体舞一区二区三区| 久久久久久久久久久久久女国产乱| 亚洲男人的天堂在线视频| 日韩电影在线观看永久视频免费网站| 国产理论在线| 日本不卡免费新一二三区| 乱码第一页成人| 丰满的亚洲女人毛茸茸| 欧美性感一类影片在线播放| av在线资源网| 亚洲精品欧美日韩专区| 综合久久亚洲| 高清中文字幕mv的电影| 大伊人狠狠躁夜夜躁av一区 | 久久久国产精品亚洲一区| 国产一区二区三区国产精品| 国产911在线观看| 国产.欧美.日韩| 国产尤物在线视频| 一区二区三区 在线观看视| 欧美a视频在线| 亚洲五码在线观看视频| 成人精品一区二区三区中文字幕| xxxx.国产| 久久精品福利视频| jizz久久精品永久免费| 久在线观看视频| 国产精品人成在线观看免费| 国产手机精品视频| 久久久久久美女| 日韩欧美二区| 免费黄视频在线观看| 色琪琪一区二区三区亚洲区| 永久免费av在线| 成人欧美一区二区三区在线观看| 亚洲在线免费| 亚洲一级理论片| 欧美va亚洲va在线观看蝴蝶网| 暖暖成人免费视频| 特级毛片在线免费观看| 成人av资源在线观看| 波多野结衣网站| 欧美另类第一页| 夜夜春成人影院| 无码人妻少妇色欲av一区二区| 精品久久久久久| 国产精品剧情| 欧美高清视频一区| 国产成人av在线影院| 夜夜躁日日躁狠狠久久av| 欧美日韩国产成人在线| jlzzjlzz亚洲女人|