最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring手動獲取bean的四種方式

 更新時間:2024年01月07日 08:51:09   作者:hvige  
本文主要介紹了Spring手動獲取bean的四種方式,包括BeanFactoryPostProcessor接口,ApplicationContextAware接口,注解 @PostConstruct 初始化時獲取,啟動類ApplicationContext獲取這四種方法,感興趣的可以了解一下

一、實現(xiàn)BeanFactoryPostProcessor接口

@Component
public class SpringUtil implements BeanFactoryPostProcessor {

    private static ConfigurableListableBeanFactory beanFactory;

    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }

    /**
     * 通過name獲取 Bean對象
     * @param name
     * @return Object 一個以所給名字注冊的bean實例
     */
    public static  <T> T getBean(String name) {
        return (T) beanFactory.getBean(name);
    }

    /**
     * 通過class獲取Bean對象
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz){
        return beanFactory.getBean(clazz);
    }

    /**
     * 如果BeanFactory包含一個與所給名稱匹配的bean對象,則返回true
     * @param name
     * @return
     */
    public static boolean containsBean(String name){
        return beanFactory.containsBean(name);
    }

    /**
     * 判斷bean對象是一個singleton還是一個prototype
     * @param name
     * @return
     * @throws NoSuchBeanDefinitionException
     */
    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException{
        return beanFactory.isSingleton(name);
    }

    /**
     * 通過 name獲取 bean 的類型
     * @param name
     * @return
     * @throws NoSuchBeanDefinitionException
     */
    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException{
        return beanFactory.getType(name);
    }

    /**
     * 通過 name 獲取 bean定義的別名
     * @param name
     * @return
     */
    public static String[] getAliases(String name){
        return beanFactory.getAliases(name);
    }
}

二、實現(xiàn)ApplicationContextAware接口

@Component
public class BeanUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        BeanUtil.applicationContext = applicationContext;
    }
    /**
     * 獲取applicationContext
     *
     * @return
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
    /**
     * 通過name獲取 Bean對象
     *
     * @param name
     * @return
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    /**
     * 通過class獲取Bean對象
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 通過name和Class返回指定的Bean對象
     *
     * @param name
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }

    /**
     * 獲取當前的環(huán)境配置
     * @return
     */
    public static String[] getActiveProfiles(){
        return getApplicationContext().getEnvironment().getActiveProfiles();
    }
}

三、注解 @PostConstruct 初始化時獲取

@Component
public class BeanStatic {

    @Autowired
    private TestService testService;

    @Autowired
    private static TestService staticTestService;

    /**
     * 用于在依賴關系注入完成之后需要執(zhí)行的方法上
     * 執(zhí)行任何初始化操作
     */
    @PostConstruct
    public void init() {
        // 初始化時把testService對象賦值給當前類定義的靜態(tài)變量
        staticTestService = testService;
    }

    // 在當前類調(diào)用業(yè)務接口
    public static String getTest() {
        return staticTestService.test();
    }
}

四、通過啟動類ApplicationContext獲取

@SpringBootApplication
public class WebApplication {

    public static ConfigurableApplicationContext applicationContext;

    public static void main(String[] args) {
        System.out.println("正在啟動。。。");
        applicationContext = SpringApplication.run(WebApplication.class, args);
        System.out.println("啟動成功");
    }
}
調(diào)用方式
@RestController
@RequestMapping("/bean")
@Api(tags = "手動獲取Bean對象測試")
public class BeanController {

    @GetMapping("test1")
    @ApiOperation("方式一")
    @ApiOperationSupport(order = 1)
    public IResult test1()
    {
        TestService testService = SpringUtil.getBean(TestService.class);
        String result = testService.test();
        return IResult.success(result);
    }

    @GetMapping("test2")
    @ApiOperation("方式二")
    @ApiOperationSupport(order = 2)
    public IResult test2()
    {
        TestService testService = BeanUtil.getBean(TestService.class);
        String result = testService.test();
        return IResult.success(result);
    }

    @GetMapping("test3")
    @ApiOperation("方式三")
    @ApiOperationSupport(order = 3)
    public IResult test3()
    {
        String result = BeanStatic.getTest();
        return IResult.success(result);
    }

    @GetMapping("test4")
    @ApiOperation("方式四")
    @ApiOperationSupport(order = 4)
    public IResult test4()
    {
        TestService testService = WebApplication.applicationContext.getBean(TestService.class);
        String result = testService.test();
        return IResult.success(result);
    }
}

到此這篇關于Spring手動獲取bean的四種方式的文章就介紹到這了,更多相關Spring手動獲取bean 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot導入Druid運行失敗問題

    SpringBoot導入Druid運行失敗問題

    這篇文章主要介紹了SpringBoot導入Druid運行失敗,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • SpringCloud FeignClient 超時設置

    SpringCloud FeignClient 超時設置

    FeignClient?默認的超時時間可能不滿足你的需求,你可以通過幾種方式來自定義這些超時設置,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • MyBatis-Plus?Page?分頁不生效的問題解決

    MyBatis-Plus?Page?分頁不生效的問題解決

    分頁是常見的一種功能,本文主要介紹了MyBatis-Plus?Page分頁不生效的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • SpringBoot工程下Lombok的應用教程詳解

    SpringBoot工程下Lombok的應用教程詳解

    這篇文章主要給大家介紹了關于SpringBoot工程下Lombok應用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Java實現(xiàn)接口的枚舉類示例

    Java實現(xiàn)接口的枚舉類示例

    這篇文章主要介紹了Java實現(xiàn)接口的枚舉類,結(jié)合實例形式分析了java接口的枚舉類相關原理與使用技巧,需要的朋友可以參考下
    2019-08-08
  • java 獲取用戶的MAC地址多種方法實例詳解

    java 獲取用戶的MAC地址多種方法實例詳解

    這篇文章主要介紹了JAVA實現(xiàn)獲取用戶的MAC地址的多種方法實例,需要的朋友可以參考下
    2017-04-04
  • Sprint Boot 集成MongoDB的操作方法

    Sprint Boot 集成MongoDB的操作方法

    最近接手一個Springboot項目,需要在原項目上增加一些需求,用到了mongodb。下面通過本文給大家分享Sprint Boot 集成MongoDB的操作方法,需要的朋友參考下吧
    2017-12-12
  • java字符串格式化(String類format方法)

    java字符串格式化(String類format方法)

    這篇文章主要介紹了java字符串格式化(String類format方法),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 一文徹底了解Java的組合模式

    一文徹底了解Java的組合模式

    組合模式(Composite?Pattern)指將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),?使得用戶對單個對象和組合對象的使用具有一致性。本文就來帶大家深入了解一下Java的組合模式吧
    2023-02-02
  • SpringBoot + validation 接口參數(shù)校驗的思路詳解

    SpringBoot + validation 接口參數(shù)校驗的思路詳解

    這篇文章主要介紹了SpringBoot + validation 接口參數(shù)校驗,本文通過項目實踐+場景分析給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10

最新評論

赞皇县| 汕尾市| 中山市| 佛山市| 克东县| 临泽县| 白水县| 泸水县| 凤凰县| 嘉鱼县| 乐安县| 肇东市| 枣阳市| 瓦房店市| 丰台区| 沿河| 南靖县| 蒙阴县| 桓仁| 礼泉县| 永德县| 中牟县| 仙居县| 饶阳县| 嵊泗县| 青海省| 虎林市| 大余县| 筠连县| 浦江县| 巨野县| 茶陵县| 万州区| 扎兰屯市| 嵩明县| 博爱县| 贵定县| 尼木县| 勃利县| 石柱| 宣化县|