精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

99在线精品视频免费观看20| youjizz亚洲女人| 成人一级福利| 国产网红主播福利一区二区| 91在线观看免费| 日产欧产va高清| 欧美成人激情| 亚洲精品电影网| 伊人色在线观看| 成人性生交大片免费看网站| 国产日韩欧美麻豆| 波多野结衣精品久久| 中文字幕国产在线观看| 亚洲精品一二三区区别| 亚洲精品中文字| 日本高清免费在线视频| 唐人社导航福利精品| 亚洲人精品一区| 日韩av在线电影观看| 亚洲第一页综合| 另类调教123区 | 色综合天天性综合| 久久久无码中文字幕久...| 国内在线免费高清视频| 成人综合婷婷国产精品久久蜜臀| 国产精品久久av| 日韩精品久久久久久久酒店| 亚洲精品一二三区区别| 在线观看视频99| 亚洲狠狠婷婷综合久久久久图片| 蜜桃在线一区| 欧美人成免费网站| 日韩av手机版| 成人影院网站| 亚洲成人av福利| 男人的天堂视频在线| 一级毛片视频在线| 久久久久国产精品免费免费搜索 | 婷婷精品在线观看| 精品国产99国产精品| 精品国产鲁一鲁一区二区三区| 中文字幕日本一区二区| 欧美日韩免费区域视频在线观看| 丰满人妻一区二区三区53号| 麻豆视频在线观看免费| 国产精品热久久久久夜色精品三区 | 丰满人妻一区二区三区53号| 欧美黄色激情| 国产精品成人免费在线| 亚洲高清乱码| 在线免费观看黄色av| 国产无遮挡一区二区三区毛片日本| 久久久人人爽| 深夜福利在线观看直播| 97久久超碰国产精品| 精品欧美国产一区二区三区不卡| 欧美 日韩 国产 在线| 岛国一区二区在线观看| 国产精品久久久久久久久久直播| 成人午夜福利视频| kk眼镜猥琐国模调教系列一区二区| av资源一区二区| 高h放荡受浪受bl| 成人av资源在线观看| 国产伦精品一区| 天天干天天爽天天操| 91麻豆国产福利精品| 美乳视频一区二区| 国产精品久久久久一区二区国产 | 致1999电视剧免费观看策驰影院| av电影在线观看网址| 国产精品久久久久久久裸模| 自拍亚洲欧美老师丝袜| 制服丝袜在线播放| 亚洲成av人片在线| 免费看又黄又无码的网站| 伊人网在线播放| 在线精品视频免费播放| 久久久久久久久久一区| 视频欧美一区| 精品一区二区三区四区在线| 日韩视频在线观看免费视频| 婷婷综合激情| 久久久久亚洲精品成人网小说| 日韩精品一区二区三区国语自制| 亚洲欧美日韩国产一区| 国产精品日韩在线播放| www.av在线.com| 久久免费看少妇高潮| 在线观看成人av电影| 亚洲精品一线| 色婷婷久久一区二区三区麻豆| 午夜剧场高清版免费观看| 亚洲1区在线| 亚洲欧美日韩在线高清直播| 日日碰狠狠添天天爽| 午夜精品电影| 国产精品黄页免费高清在线观看| 99热这里是精品| 91视频你懂的| 三级在线免费观看| 怡红院成人在线| 日韩精品一区二区三区三区免费 | 全国男人的天堂网| 国产精品天天摸av网| 国产精品成人久久电影| 成人在线免费电影网站| 亚洲国产精品久久久久久| 天天舔天天操天天干| 亚洲国产一区二区三区a毛片| 国产91亚洲精品| 亚洲国产精品久久久久久久| 中文字幕欧美激情一区| 黄色免费视频大全| 久久九九精品视频| 在线免费观看羞羞视频一区二区| 日本免费一二三区| 国产麻豆精品视频| 亚洲 日韩 国产第一区| 亚洲一二三四| 亚洲第一页中文字幕| 日韩欧美综合视频| 美腿丝袜亚洲一区| 日本一区视频在线播放| 都市激情国产精品| 亚洲精品在线观看网站| 国产十六处破外女视频| 久久精品国产网站| 日本一区免费| 345成人影院| 日韩国产一区三区| 国产大片中文字幕在线观看| 韩国欧美国产1区| 一区二区在线中文字幕电影视频 | 欧美片第1页综合| 国产精品网红福利| av网页在线| 在线免费亚洲电影| 尤物视频最新网址| 久久国产直播| 欧美中日韩一区二区三区| 在线精品亚洲欧美日韩国产| 日韩国产欧美区| 特黄视频免费看| 91视视频在线观看入口直接观看www| 国产不卡一区二区视频| 久久夜色精品国产噜噜av小说| 欧美激情一级精品国产| 国产成人精品白浆久久69| 亚洲欧美日韩在线不卡| 日韩a一级欧美一级| 亚洲自拍偷拍网| 91手机在线观看| h片精品在线观看| 亚洲国产精品yw在线观看| 日本少妇久久久| 99国产欧美久久久精品| 国产91对白刺激露脸在线观看| 青青一区二区| 欧洲一区二区视频| h网站在线免费观看| 欧美喷潮久久久xxxxx| 日本午夜在线观看| 国产成人精品免费| 激情伊人五月天| 最新亚洲精品| 国产欧美一区二区三区在线| 免费高清完整在线观看| 日韩一级二级三级| 日韩 欧美 精品| 欧美激情一区二区三区四区| av在线网址导航| 国产精品大片| 久久久久久99| 久久亚洲资源中文字| 超薄丝袜一区二区| 色婷婷av一区二区三区之红樱桃 | 欧美精品色婷婷五月综合| 成人影视亚洲图片在线| 成人网欧美在线视频| 欧美videossex| 亚洲天堂免费视频| 91在线你懂的| 午夜精品福利一区二区三区av| 欧美黄色一级生活片| 国产在线精品一区二区夜色| 国产v片免费观看| 欧美日韩精品在线一区| 91文字幕巨乱亚洲香蕉| 成人免费网站视频| 久久久精品欧美| 污污视频在线免费看| 欧美日韩在线免费视频| 国产亚洲欧美久久久久| 欧美激情综合五月色丁香小说| 天美一区二区三区| 久久狠狠一本精品综合网| eeuss中文| 久久不卡国产精品一区二区| 91精品婷婷国产综合久久蝌蚪| www.精品| 欧美精品精品精品精品免费| eeuss影院www在线观看| 亚洲国产成人在线视频| 中文字幕一区二区三区四区视频| 亚洲一区二区高清| 男人的午夜天堂| 97精品电影院| 女同性αv亚洲女同志| 日欧美一区二区| 日本十八禁视频无遮挡| 亚洲精品一二三区区别| 水蜜桃一区二区三区| 美女午夜精品| 不卡日韩av| 亚洲欧洲二区| 国产精品∨欧美精品v日韩精品| 五月花成人网| 日韩小视频在线| 国产高清av在线| 日韩国产高清污视频在线观看| www.国产黄色| 欧美人与z0zoxxxx视频| 怡红院av久久久久久久| 性感美女极品91精品| 懂色av懂色av粉嫩av| 中文字幕乱码亚洲精品一区 | 日韩av网站在线免费观看| 97在线资源站| 午夜日韩影院| 成人在线小视频| 欧美一级网址| 国产精品网址在线| 国产精品第一国产精品| 国产精品第10页| 久久天堂av| 日韩av手机在线| 丝袜美腿一区| 国产精品福利小视频| xxxxxx欧美| 日韩免费观看av| 视频一区在线免费看| 国产成人aa精品一区在线播放| 神马午夜在线视频| 51精品在线观看| 成人在线爆射| 国产精品69久久久久| 浪潮色综合久久天堂| 国产精品7m视频| 色综合视频一区二区三区日韩| 国产精品青青在线观看爽香蕉 | 日韩一级视频免费观看在线| 国产成人毛毛毛片| 日韩三级av在线播放| 亚洲国产福利视频| 精品国产免费一区二区三区香蕉| 国精产品一品二品国精品69xx| 亚洲国产精品高清久久久| 日韩在线视频第一页| 国产婷婷成人久久av免费高清| 欧洲视频在线免费观看| 夜夜嗨av一区二区三区免费区| a√在线中文网新版址在线| xvideos亚洲| 后进极品白嫩翘臀在线播放| 97在线免费观看| 精品成人免费一区二区在线播放| 国产精品日本精品| 亚洲专区**| 免费成人看片网址| 日韩精品第一区| 亚洲黄色网址在线观看| 亚洲欧洲一区| 又色又爽又高潮免费视频国产| 日本不卡的三区四区五区| 国产大片一区二区三区| 成人精品鲁一区一区二区| 日韩人妻一区二区三区| 国产精品视频免费| 久久久久久久福利| 日韩欧美在线播放| 一级片一区二区三区| 欧美白人最猛性xxxxx69交| 日中文字幕在线| 日韩视频欧美视频| av电影在线免费| 国产伦精品免费视频| 大桥未久女教师av一区二区| 欧美日韩精品免费看| 一区二区免费不卡在线| 可以在线看的黄色网址| 国产精品一品二品| 日韩一级视频在线观看| 国产精品国产a| 亚洲视频免费播放| 欧美人xxxx| 天天在线女人的天堂视频| 久久这里有精品| 欧美国产大片| 国产福利久久| 日韩欧美网址| 鲁一鲁一鲁一鲁一澡| 久久国产精品色| 亚洲激情视频小说| 亚洲线精品一区二区三区八戒| 国产精品久久久久久久久夜色| 日韩一级片在线观看| 国产黄色片在线播放| 91精品国产色综合| 日韩有吗在线观看| 亚洲精品美女久久7777777| aa亚洲婷婷| 国产女主播在线播放| 亚洲免费观看高清完整版在线| 精产国品一区二区| 精品亚洲国产视频| 黄色的视频在线观看| 91国产丝袜在线放| 欧美成人自拍| 牛夜精品久久久久久久| 26uuu另类欧美| 国产污视频在线看| 91精品国产综合久久精品性色| 国产精品一区二区婷婷| 欧美影院久久久| 日韩av影院| 91精品国产91久久久久麻豆 主演| 国内成人免费视频| 国产黄色片在线| 欧美日韩小视频| 国产福利第一视频在线播放| 日本欧美中文字幕| 欧美日韩一区二区三区在线电影 | 欧美重口乱码一区二区| 一本色道久久综合亚洲精品不卡| 激情小说欧美色图| 一区二区成人在线| 亚洲AV无码精品国产| 欧美乱妇高清无乱码| 人人爱人人干婷婷丁香亚洲| 18视频在线观看娇喘| 国产综合色在线| 国产大学生自拍| 日韩手机在线导航| 日本在线观看高清完整版| 成人三级在线| 在线观看视频日韩| 久久国产精品无码一级毛片| 天天av天天翘天天综合网色鬼国产| 好吊色一区二区| 91精品91久久久久久| 欧美日韩精品一区二区三区在线观看| 国产精品网站免费| 久久一区二区视频| 男人的天堂av网站| 中文字幕免费精品一区高清| 久久亚洲资源中文字| 精品日韩在线播放| 国产.欧美.日韩| 天天操天天摸天天干| 亚洲免费人成在线视频观看| 免费观看成人性生生活片 | 国产精品mv在线观看| 国产女主播在线播放| 天天综合网天天综合色| 嫩草研究院在线| 国产女人18毛片水18精品| 亚洲最新色图| 国产一级伦理片| 欧美亚洲综合另类| 欧美日韩在线看片| 国产另类自拍| 日韩精品五月天| 国产a免费视频| 日韩久久午夜影院| 婷婷久久综合九色综合99蜜桃| 国产a级黄色大片| 26uuuu精品一区二区| 在线播放成人av| 久久久久久亚洲精品| 欧美精品尤物在线观看| 成人性生交视频免费观看| 午夜精品久久久久久久99水蜜桃| 久草在线免费福利资源| 亚洲aⅴ男人的天堂在线观看 | 人人狠狠综合久久亚洲婷| 国产又黄又嫩又滑又白| 日韩欧美在线网址| 黄色动漫在线| 久久综合色一本| 国产最新精品免费| 91video| 久久最新资源网| 女人av一区| 极品白嫩少妇无套内谢| 色国产综合视频| 久久国产精品黑丝| 亚洲精品白虎| 91麻豆精品视频| 超碰免费在线97|