1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SpringBoot靜態(tài)獲取 bean的三種方式,你學(xué)會(huì)了嗎?

        共 3615字,需瀏覽 8分鐘

         ·

        2021-11-18 10:40

        來(lái)源:blog.csdn.net/showchi/article/details/97005720

        注意:調(diào)用者要被spring管理

        目錄

        • 方式一 ?注解@PostConstruct
        • 方式二 ?啟動(dòng)類(lèi)ApplicationContext
        • 方式三 手動(dòng)注入ApplicationContext

        方式一 ?注解@PostConstruct

        import?com.example.javautilsproject.service.AutoMethodDemoService;
        import?org.springframework.beans.factory.annotation.Autowired;
        import?org.springframework.stereotype.Component;
        ?
        import?javax.annotation.PostConstruct;
        ?
        /**
        ?*?springboot靜態(tài)方法獲取?bean?的三種方式(一)
        ?*?@author:?clx
        ?*?@version:?1.1.0
        ?*/

        @Component
        public?class?StaticMethodGetBean_1?{
        ?
        ????@Autowired
        ????private?AutoMethodDemoService?autoMethodDemoService;
        ?
        ????@Autowired
        ????private?static?AutoMethodDemoService?staticAutoMethodDemoService;
        ?
        ????@PostConstruct
        ????public?void?init()?{
        ????????staticAutoMethodDemoService?=?autoMethodDemoService;
        ????}
        ?
        ????public?static?String?getAuthorizer()?{
        ????????return?staticAutoMethodDemoService.test();
        ????}
        }

        注解@PostConstruct說(shuō)明

        PostConstruct 注釋用于在依賴(lài)關(guān)系注入完成之后需要執(zhí)行的方法上,以執(zhí)行任何初始化。此方法必須在將類(lèi)放入服務(wù)之前調(diào)用。支持依賴(lài)關(guān)系注入的所有類(lèi)都必須支持此注釋。即使類(lèi)沒(méi)有請(qǐng)求注入任何資源,用 PostConstruct 注釋的方法也必須被調(diào)用。只有一個(gè)方法可以用此注釋進(jìn)行注釋。

        應(yīng)用 PostConstruct 注釋的方法必須遵守以下所有標(biāo)準(zhǔn):

        • 該方法不得有任何參數(shù),除非是在 EJB 攔截器 (interceptor) 的情況下,根據(jù) EJB 規(guī)范的定義,在這種情況下它將帶有一個(gè) InvocationContext 對(duì)象 ;
        • 該方法的返回類(lèi)型必須為 void;
        • 該方法不得拋出已檢查異常;
        • 應(yīng)用 PostConstruct 的方法可以是 public、protected、package private 或 private;
        • 除了應(yīng)用程序客戶(hù)端之外,該方法不能是 static;
        • 該方法可以是 final;
        • 如果該方法拋出未檢查異常,那么不得將類(lèi)放入服務(wù)中,除非是能夠處理異常并可從中恢復(fù)的 EJB。

        方式二 ?啟動(dòng)類(lèi)ApplicationContext

        實(shí)現(xiàn)方式:在springboot的啟動(dòng)類(lèi)中,定義static變量ApplicationContext,利用容器的getBean方法獲得依賴(lài)對(duì)象

        ?
        import?org.springframework.boot.SpringApplication;
        import?org.springframework.boot.autoconfigure.SpringBootApplication;
        import?org.springframework.context.ConfigurableApplicationContext;
        /**
        ?*?@author:?clx
        ?*?@version:?1.1.0
        ?*/

        @SpringBootApplication
        public?class?Application?{
        ????public?static?ConfigurableApplicationContext?ac;
        ????public?static?void?main(String[]?args)?{
        ???????ac?=?SpringApplication.run(Application.class,?args);
        ????}
        ?
        }

        調(diào)用方式

        /**
        ?*?@author:?clx
        ?*?@version:?1.1.0
        ?*/

        @RestController
        public?class?TestController?{
        ????/**
        ?????*?方式二
        ?????*/

        ????@GetMapping("test2")
        ????public?void?method_2()?{
        ????????AutoMethodDemoService?methodDemoService?=?Application.ac.getBean(AutoMethodDemoService.class);
        ????????String?test2?=?methodDemoService.test2();
        ????????System.out.println(test2);
        ????}
        }

        方式三 手動(dòng)注入ApplicationContext

        手動(dòng)注入ApplicationContext

        import?org.springframework.beans.BeansException;
        import?org.springframework.context.ApplicationContext;
        import?org.springframework.context.ApplicationContextAware;
        import?org.springframework.stereotype.Component;
        ?
        ?
        /**
        ?*?springboot靜態(tài)方法獲取?bean?的三種方式(三)
        ?*?@author:?clx
        ?*?@version:?1.1.0
        ?*/

        @Component
        public?class?StaticMethodGetBean_3<T>?implements?ApplicationContextAware?{
        ????private?static?ApplicationContext?applicationContext;
        ????@Override
        ????public?void?setApplicationContext(ApplicationContext?applicationContext)?throws?BeansException?{
        ????????StaticMethodGetBean_3.applicationContext?=?applicationContext;
        ????}
        ?
        ????public?static??T??getBean(Class?clazz)?{
        ????????return?applicationContext?!=?null?applicationContext.getBean(clazz):null;
        ????}
        }

        調(diào)用方式

        ????/**
        ?????*?方式三
        ?????*/

        ????@Test
        ????public?void?method_3()?{
        ????????AutoMethodDemoService?autoMethodDemoService?=?StaticMethodGetBean_3.getBean(AutoMethodDemoService.class);
        ????????String?test3?=?autoMethodDemoService.test3();
        ????????System.out.println(test3);
        ????}

        以上三種方式樓主都測(cè)試過(guò)可以為完美使用

        程序汪資料鏈接

        程序汪接的7個(gè)私活都在這里,經(jīng)驗(yàn)整理

        Java項(xiàng)目分享 最新整理全集,找項(xiàng)目不累啦 06版

        堪稱(chēng)神級(jí)的Spring Boot手冊(cè),從基礎(chǔ)入門(mén)到實(shí)戰(zhàn)進(jìn)階

        臥槽!字節(jié)跳動(dòng)《算法中文手冊(cè)》火了,完整版 PDF 開(kāi)放下載!

        臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開(kāi)放下載!

        字節(jié)跳動(dòng)總結(jié)的設(shè)計(jì)模式 PDF 火了,完整版開(kāi)放下載!


        歡迎添加程序汪個(gè)人微信 itwang009? 進(jìn)粉絲群或圍觀(guān)朋友圈

        瀏覽 52
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            午夜免费视频 | aaaaaa免费视频 | 故意短裙公车被强好爽电影 | 精品黄| 日本国产在线视频 | 亚洲无码三区 | 免费视频91蜜桃 | 青青操天天干 | 手机av免费 | 乱伦A片 无码免费毛片不卡视频视频 |