日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

@Async注解失效的九種場景

來源: 責編: 時間:2024-05-08 09:23:37 231觀看
導讀前言最近有粉絲問了我一個問題:他在項目某個方法使用@Async注解,但是該方法還是同步執(zhí)行了,異步不起作用,到底是什么原因呢?偽代碼如下:@Slf4j@Servicepublic class UserService { @Async public void async(String v

前言

最近有粉絲問了我一個問題:他在項目某個方法使用@Async注解,但是該方法還是同步執(zhí)行了,異步不起作用,到底是什么原因呢?9vL28資訊網(wǎng)——每日最新資訊28at.com

偽代碼如下:9vL28資訊網(wǎng)——每日最新資訊28at.com

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

這個問題還是比較有意思的,今天這篇文章總結了@Async注解失效的9種場景,希望對你會有所幫助。9vL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9vL28資訊網(wǎng)——每日最新資訊28at.com

1 未使用@EnableAsync注解

在Spring中要開啟@Async注解異步的功能,需要在項目的啟動類,或者配置類上,使用@EnableAsync注解。9vL28資訊網(wǎng)——每日最新資訊28at.com

例如:9vL28資訊網(wǎng)——每日最新資訊28at.com

@EnableAsync@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})public class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

@EnableAsync注解相當于一個開關,控制是否開啟@Async注解異步的功能,默認是關閉的。9vL28資訊網(wǎng)——每日最新資訊28at.com

如果在項目的啟動類上沒使用@EnableAsync注解,則@Async注解異步的功能不生效。9vL28資訊網(wǎng)——每日最新資訊28at.com

2 內部方法調用

我們在日常開發(fā)中,經(jīng)常需要在一個方法中調用另外一個方法,例如:9vL28資訊網(wǎng)——每日最新資訊28at.com

@Slf4j@Servicepublic class UserService {    public void test() {        async("test");    }    @Async    public void async(String value) {        log.info("async:{}", value);    }}

這個示例中,在UserService類中的test()方法中調用了async()方法。9vL28資訊網(wǎng)——每日最新資訊28at.com

如果在controller中@Autowired了UserService類的對象,調用了它的test()方法,則async()異步的功能會失效。9vL28資訊網(wǎng)——每日最新資訊28at.com

我們知道Spring通過@Async注解實現(xiàn)異步的功能,底層其實是通過Spring的AOP實現(xiàn)的,也就是說它需要通過JDK動態(tài)代理或者cglib,生成代理對象。9vL28資訊網(wǎng)——每日最新資訊28at.com

異步的功能,是在代理對象中增加的,我們必須調用代理對象的test()方法才行。9vL28資訊網(wǎng)——每日最新資訊28at.com

而在類中直接進行方法的內部調用,在test()方法中調用async()方法,調用的是該類原對象的async方法,相當于調用了this.async()方法,而并非UserService代理類的async()方法。9vL28資訊網(wǎng)——每日最新資訊28at.com

因此,像這種內部方法調用,@Async注解的異步功能會失效。9vL28資訊網(wǎng)——每日最新資訊28at.com

3 方法非public

在Java中有4種權限修飾符9vL28資訊網(wǎng)——每日最新資訊28at.com

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

在實際工作中,我們使用頻率最高的可能是public和private了。9vL28資訊網(wǎng)——每日最新資訊28at.com

如果我在定義Service類中的某個方法時,有時把權限修飾符定義錯了,例如:9vL28資訊網(wǎng)——每日最新資訊28at.com

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

這個例子中將UserService類的async()方法的權限修飾符定義成了private的,這樣@Async注解也會失效。9vL28資訊網(wǎng)——每日最新資訊28at.com

因為private修飾的方法,只能在UserService類的對象中使用。9vL28資訊網(wǎng)——每日最新資訊28at.com

而@Async注解的異步功能,需要使用Spring的AOP生成UserService類的代理對象,該代理對象沒法訪問UserService類的private方法,因此會出現(xiàn)@Async注解失效的問題。9vL28資訊網(wǎng)——每日最新資訊28at.com

4 方法返回值錯誤

我們在寫一個新的方法時,經(jīng)常需要定義方法的返回值。9vL28資訊網(wǎng)——每日最新資訊28at.com

返回值可以是void、int、String、User等等,但如果返回值定義錯誤,也可能會導致@Async注解的異步功能失效。9vL28資訊網(wǎng)——每日最新資訊28at.com

例如:9vL28資訊網(wǎng)——每日最新資訊28at.com

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

UserService類的async方法的返回值是String,這種情況竟然會導致@Async注解的異步功能失效。9vL28資訊網(wǎng)——每日最新資訊28at.com

在AsyncExecutionInterceptor類的invoke()方法,會調用它的父類AsyncExecutionAspectSupport中的doSubmit方法,該方法時異步功能的核心代碼,如下:9vL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9vL28資訊網(wǎng)——每日最新資訊28at.com

從圖中看出,@Async注解的異步方法的返回值,要么是Future,要么是null。9vL28資訊網(wǎng)——每日最新資訊28at.com

因此,在實際項目中,如果想要使用@Async注解的異步功能,相關方法的返回值必須是void或者Future。9vL28資訊網(wǎng)——每日最新資訊28at.com

5 方法用static修飾了

有時候,我們的方法會使用static修飾,這樣在調用的地方,可以直接使用類名.方法名,訪問該方法了。9vL28資訊網(wǎng)——每日最新資訊28at.com

但如果在@Async方法上加了static修飾符,例如:9vL28資訊網(wǎng)——每日最新資訊28at.com

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

這時@Async的異步功能會失效,因為這種情況idea會直接報錯:Methods annotated with '@Async' must be overridable 。9vL28資訊網(wǎng)——每日最新資訊28at.com

使用@Async注解聲明的方法,必須是能被重寫的,很顯然static修飾的方法,是類的靜態(tài)方法,是不允許被重寫的。9vL28資訊網(wǎng)——每日最新資訊28at.com

因此這種情況下,@Async注解的異步功能會失效。9vL28資訊網(wǎng)——每日最新資訊28at.com

6 方法用final修飾

在Java種final關鍵字,是一個非常特別的存在。9vL28資訊網(wǎng)——每日最新資訊28at.com

用final修飾的類,沒法被繼承。9vL28資訊網(wǎng)——每日最新資訊28at.com

用final修飾的方法,沒法被重寫。9vL28資訊網(wǎng)——每日最新資訊28at.com

用final修飾的變量,沒法被修改。9vL28資訊網(wǎng)——每日最新資訊28at.com

如果final使用不當,也會導致@Async注解的異步功能失效,例如:9vL28資訊網(wǎng)——每日最新資訊28at.com

@Slf4j@Servicepublic 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 。9vL28資訊網(wǎng)——每日最新資訊28at.com

因為使用final關鍵字修飾的方法,是沒法被子類重寫的。9vL28資訊網(wǎng)——每日最新資訊28at.com

因此這種情況下,@Async注解的異步功能會失效。9vL28資訊網(wǎng)——每日最新資訊28at.com

7 業(yè)務類沒加@Service注解

有時候,我們在新加Service類時,會忘了加@Service注解,例如:9vL28資訊網(wǎng)——每日最新資訊28at.com

@Slf4j//@Servicepublic class UserService {    @Async    public void async(String value) {        log.info("async:{}", value);    }}@Servicepublic class TestService {   @Autowired   private UserService userService;    public void test() {        userService.async("test");    }}

這種情況下,@Async注解異步的功能也不會生效。因為UserService類沒有使用@Service、@Component或者@Controller等注解聲明,該類不會被Spring管理,因此也就無法使用Spring的異步功能。9vL28資訊網(wǎng)——每日最新資訊28at.com

8 自己new的對象

在項目中,我們經(jīng)常需要new一個對象,然后對他賦值,或者調用它的方法。9vL28資訊網(wǎng)——每日最新資訊28at.com

但如果new了一個Service類的對象,可能會出現(xiàn)一些意想不到的問題,例如:9vL28資訊網(wǎng)——每日最新資訊28at.com

@Slf4j@Servicepublic class UserService {    @Async    public void async(String value) {        log.info("async:{}", value);    }}@Servicepublic class TestService {    public void test() {        UserService userService = new UserService();        userService.async("test");    }}

在TestService類的test()方法中,new了一個UserService類的對象,然后調用該對象的async()方法。9vL28資訊網(wǎng)——每日最新資訊28at.com

很顯然這種情況下,async()方法只能同步執(zhí)行,沒法異步執(zhí)行。9vL28資訊網(wǎng)——每日最新資訊28at.com

因為在項目中,我們自己new的對象,不會被Spring管理,因此也就無法使用Spring的異步功能。9vL28資訊網(wǎng)——每日最新資訊28at.com

不過我們可以通過BeanPostProcessor類,將創(chuàng)建的對象手動注入到Spring容器中。9vL28資訊網(wǎng)——每日最新資訊28at.com

9 Spring無法掃描異步類

我們在Spring項目中可以使用@ComponentScan注解指定項目中掃描的包路徑,例如:9vL28資訊網(wǎng)——每日最新資訊28at.com

@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注解異步的功能失效。9vL28資訊網(wǎng)——每日最新資訊28at.com

同時如果@ComponentScan注解定義的路徑,沒有包含你新加的Servcie類的路徑,@Async注解異步的功能也會失效。9vL28資訊網(wǎng)——每日最新資訊28at.com

好了,今天的文章內容先到這里。9vL28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-87270-0.html@Async注解失效的九種場景

聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 從輸入 Url 到頁面渲染的不同階段給出優(yōu)化建議

下一篇: 京東:今年 618 大促活動 5 月 31 日現(xiàn)貨開售

標簽:
  • 熱門焦點
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據(jù)博主數(shù)碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 深度探索 Elasticsearch 8.X:function_score 參數(shù)解讀與實戰(zhàn)案例分析

    在 Elasticsearch 中,function_score 可以讓我們在查詢的同時對搜索結果進行自定義評分。function_score 提供了一系列的參數(shù)和函數(shù)讓我們可以根據(jù)需求靈活地進行設置。近期
  • 三萬字盤點 Spring 九大核心基礎功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎功能。話不多說,先上目錄:圖片友情提示,本文過長,建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個核心的基礎功能,不
  • Temu起訴SHEIN,跨境電商戰(zhàn)事升級

    來源 | 伯虎財經(jīng)(bohuFN)作者 | 陳平安日前據(jù)外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein“利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優(yōu)酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 最“俊美”淘寶賣家,靠直播和短視頻圈粉,上架秒光,年銷3000萬

    來源 | 電商在線文|易琬玉編輯|斯問受訪店鋪:Ringdoll戒之人形圖源:微博@御座的黃山、“Ringdoll戒之人形”淘寶店鋪有關外貌的評價,黃山已經(jīng)聽累了。生于1985年的他,哪
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創(chuàng)始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,“7
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現(xiàn)場,成為了展會的一大看點。這也是三翼鳥繼9月9日發(fā)布了行業(yè)首個一站式定制智慧家平臺后的
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品美腿一区在线看| 鲁鲁狠狠狠7777一区二区| av不卡免费看| 这里是久久伊人| 午夜亚洲激情| 久久夜色精品国产欧美乱| 欧美激情视频给我| 国产精品你懂的| 韩日精品视频| 亚洲乱码一区二区| 亚洲一级黄色片| 久久久久国产免费免费| 欧美激情精品久久久久久免费印度 | 久久久久久夜| 欧美精品一区二| 国产欧美日本一区视频| 香蕉亚洲视频| 欧美mv日韩mv国产网站| 国产精品va在线播放| 国产欧美一区二区精品性色| 亚洲国产日韩一级| 亚洲欧美网站| 欧美黄色免费网站| 国产香蕉97碰碰久久人人| 亚洲人成网在线播放| 午夜日韩在线| 欧美极品在线观看| 国产日韩欧美视频| 99精品福利视频| 久久久久久久性| 国产精品大片免费观看| 亚洲国产欧美不卡在线观看| 性色av香蕉一区二区| 欧美精品久久一区| 国产日韩欧美亚洲一区| 99精品欧美| 美女爽到呻吟久久久久| 国产精品裸体一区二区三区| 亚洲激精日韩激精欧美精品| 欧美一区二区黄色| 欧美日精品一区视频| 亚洲成色最大综合在线| 欧美一区成人| 欧美视频在线观看| 亚洲国产日本| 久久九九免费| 国产伦一区二区三区色一情| 99国产精品自拍| 欧美成人国产va精品日本一级| 国产日韩精品一区二区三区| 亚洲视频电影图片偷拍一区| 欧美国产在线观看| 亚洲春色另类小说| 久久九九精品| 国产亚洲日本欧美韩国| 午夜精品久久久久久久99水蜜桃| 欧美日韩不卡合集视频| 亚洲电影第三页| 久久久久欧美| 国产一区二区三区高清| 亚洲免费中文| 欧美视频国产精品| 亚洲免费av片| 欧美激情一区二区三级高清视频| 在线观看视频一区二区欧美日韩| 久久国产精品亚洲77777| 国产精品日产欧美久久久久| 一区二区三区视频在线观看| 欧美大片第1页| 亚洲高清免费视频| 美女尤物久久精品| 激情欧美一区二区三区| 久久久国产精品一区二区三区| 国产日产欧产精品推荐色 | 欧美高清视频www夜色资源网| 在线成人中文字幕| 久久在线免费视频| 亚洲第一精品电影| 久热精品在线| 亚洲国产婷婷香蕉久久久久久| 久久人91精品久久久久久不卡| 国内视频一区| 久久综合久久88| 亚洲成人原创| 久久久久久久久岛国免费| 国产亚洲视频在线观看| 欧美亚洲视频| 国产亚洲一区二区三区在线观看| 久久精品99国产精品| 狠狠色狠狠色综合人人| 久久精彩免费视频| 黄色一区二区三区| 蜜桃av噜噜一区二区三区| 亚洲黑丝在线| 欧美日韩一区二区三| 亚洲视频在线观看视频| 国产精品美女一区二区在线观看| 午夜欧美大片免费观看| 国产日韩在线亚洲字幕中文| 久久久久高清| 欧美大片免费观看| 亚洲黄网站在线观看| 欧美精品乱人伦久久久久久| 一区二区三区精品视频在线观看| 欧美天天综合网| 欧美亚洲日本网站| 一区二区在线不卡| 欧美激情第一页xxx| 中日韩美女免费视频网址在线观看 | 亚洲二区视频在线| 欧美另类亚洲| 亚洲免费在线观看| 黄色成人精品网站| 欧美精品网站| 亚洲一区视频| 国内精品一区二区| 欧美激情精品久久久久久大尺度 | 一区在线免费| 欧美日韩国产综合在线| 亚洲女人天堂av| 黄色影院成人| 欧美日韩999| 欧美一区二区在线看| 亚洲激情av在线| 欧美新色视频| 久久一区国产| 一区二区三区精品在线| 国产日韩一区二区三区在线| 欧美大片va欧美在线播放| 亚洲宅男天堂在线观看无病毒| 黄色成人精品网站| 欧美日韩国语| 久久九九99视频| 99精品国产一区二区青青牛奶| 国产欧美一区二区精品忘忧草| 蜜桃av一区二区三区| 亚洲欧美电影在线观看| 亚洲第一搞黄网站| 国产精品五区| 欧美好吊妞视频| 欧美一二区视频| 亚洲精选国产| 国产一区二区精品丝袜| 欧美日韩中文字幕日韩欧美| 久久久久久亚洲精品不卡4k岛国| 一本色道久久综合狠狠躁篇怎么玩| 国产一级精品aaaaa看| 欧美日韩国产美女| 久久亚洲风情| 亚洲尤物在线视频观看| 亚洲国产精品专区久久| 国产精品综合不卡av| 欧美精品免费播放| 久久精品女人的天堂av| 这里只有精品电影| 亚洲国产精品激情在线观看| 国产精品视频导航| 欧美精品一区视频| 久久婷婷亚洲| 性伦欧美刺激片在线观看| 亚洲伦理久久| 一区二区三区在线不卡| 国产精品欧美经典| 欧美日韩国产精品自在自线| 久久久免费精品视频| 午夜精品久久久99热福利| 99精品欧美一区二区三区综合在线| 狠狠久久亚洲欧美| 国产精品日韩一区二区三区| 欧美剧在线观看| 麻豆国产精品va在线观看不卡| 性欧美8khd高清极品| 国产精品99久久久久久久vr| 亚洲黄色免费| 一区在线影院| 国产午夜亚洲精品不卡| 国产精品免费久久久久久| 欧美日韩精品系列| 欧美成人中文字幕| 噜噜噜躁狠狠躁狠狠精品视频| 欧美一区二区三区四区视频| 亚洲一区二区三区四区中文| 99av国产精品欲麻豆| 亚洲精品国偷自产在线99热| 伊人色综合久久天天| 国产一区二区三区在线观看免费 | 国产精品麻豆成人av电影艾秋| 欧美日本不卡高清| 欧美黄色免费网站| 免费在线观看日韩欧美| 久久综合九色九九| 久久久亚洲高清| 久久福利资源站| 欧美有码在线视频| 欧美在线欧美在线| 性一交一乱一区二区洋洋av| 亚洲宅男天堂在线观看无病毒| 国产精品99久久久久久人| 中日韩美女免费视频网址在线观看| 99视频一区二区| 欧美日韩视频在线观看一区二区三区| 欧美激情第3页| 欧美日韩国产一区二区三区| 欧美日韩一本到|