日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【学习笔记】springBoot中获取sping管理的bean

發(fā)布時(shí)間:2024/3/26 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习笔记】springBoot中获取sping管理的bean 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、使用場(chǎng)景
  • 二、springBoot中獲取sping管理的bean
    • 2.1 生成工具類(lèi)SpringContextUtil
    • 2.2 使用工具類(lèi)SpringContextUtil
    • 2.3 注意事項(xiàng):getApplicationContext為Null問(wèn)題
  • 三、參考文檔

一、使用場(chǎng)景

某些場(chǎng)景下,需要在某個(gè)普通的java類(lèi)(非Spring框架管理)中使用Spring管理的bean,這個(gè)時(shí)候可以使用實(shí)現(xiàn) ApplicationContextAware 的方式來(lái)獲取目標(biāo)bean.

二、springBoot中獲取sping管理的bean

2.1 生成工具類(lèi)SpringContextUtil

寫(xiě)一個(gè)工具類(lèi)SpringContextUtil,該類(lèi)實(shí)現(xiàn) ApplicationContextAware,通過(guò) beanName、bean對(duì)應(yīng)的Class、beanName+bean對(duì)應(yīng)的Class 三種方式來(lái)獲取目標(biāo)bean,具體如下:

package com.bigbear.test.utils; @Component @Slf4j public class SpringContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if (SpringContextUtil.applicationContext == null) {SpringContextUtil.applicationContext = applicationContext;}log.info("ApplicationContext配置成功,applicationContext對(duì)象:"+SpringContextUtil.applicationContext);}public static ApplicationContext getApplicationContext(){return applicationContext;}/*** 通過(guò)beanName獲取 Bean* @param beanName* @return*/public static Object getBean(String beanName){return getApplicationContext().getBean(beanName);}/*** 通過(guò)class獲取Bean* @param clazz* @return*/public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}/*** 通過(guò)beanName,以及Clazz返回指定的Bean* @param name* @param clazz* @param <T>* @return*/public static <T> T getBean(String beanName, Class<T> clazz) {return getApplicationContext().getBean(beanName, clazz);} }

1、實(shí)現(xiàn)ApplicationContextAware接口:Spring項(xiàng)目啟動(dòng)初始化的過(guò)程中,會(huì)有一個(gè)步驟執(zhí)行ApplicationContextAware接口的實(shí)現(xiàn)類(lèi)的setApplicationContext方法,這樣我們就能拿到applicationContext信息,進(jìn)而可以通過(guò)sprig上下文獲取想要的bean。

2、需要使用 @Component ,讓spring能夠掃描到該工具類(lèi);

3、根據(jù)需求,可以通過(guò) beanName 或 bean對(duì)應(yīng)的class 獲取目標(biāo)bean;

2.2 使用工具類(lèi)SpringContextUtil

這里有個(gè)被Spring管理的bean : myTestDemo

@Service("myTestDemo") public class MyTestDemo {@Autowiredprivate UserService userService;public String getPasswordByAppId(String loginName) {UserDo userDo = userService.findUserByLoginName(loginName);if(ObjectUtils.isEmpty(userDo) || StringUtils.isEmpty(userDo.getPassword())){return "";}return userDo.getPassword();} }

在另外一個(gè)java類(lèi)中通過(guò)Spring上下文獲取這個(gè) “myTestDemo” bean,并用來(lái)生成一個(gè)對(duì)象:

@Configuration public class ApiIdentificatorConfig {@Bean("apiIdentificator")public ApiIdentificator getApiIdentificator(){// 獲取Spring上下文ApplicationContext context = SpringContextUtil.getApplicationContext();//從Spring上下文中取出 myTestBean beanMyTestDemo myTestDemo = (MyTestDemo)context.getBean("myTestDemo");// myTestBean 是生成 apiIdentificator 對(duì)象 的構(gòu)造參數(shù)return new DefaultApiIdentificatorImpl(myTestDemo);} }

2.3 注意事項(xiàng):getApplicationContext為Null問(wèn)題

在上述使用過(guò)程中可能會(huì)出現(xiàn) “getApplicationContext為Null問(wèn)題 ”,原因是Spring初始化過(guò)程中SpringContextUtil.setApplicationContext() 方法沒(méi)有被執(zhí)行,導(dǎo)致 applicationContext 沒(méi)有獲取到。

解決辦法:在SpringBoot啟動(dòng)類(lèi)掃描的時(shí)候,該SpringContextUtil類(lèi)必須優(yōu)先執(zhí)行類(lèi)掃描。

具體來(lái)說(shuō)有兩種解法:
way1: 將 SpringContextUtil.java 這個(gè)類(lèi)和springboot啟動(dòng)類(lèi)放同一包下;
way2: 更改springboot啟動(dòng)類(lèi)的包掃描路徑, 將該類(lèi)放到第一個(gè)掃描的位置即可,如下:

@SpringBootApplication(scanBasePackages = {"com.bigbear.test.utils","com.bigbear.test.*"}) public class SpringBootHelloApplication {public static void main(String[] args) {SpringApplication.run(SpringBootHelloApplication.class, args);} }

三、參考文檔

1、spring boot獲取spring容器中的bean對(duì)象:https://blog.csdn.net/qq_29235677/article/details/119652555
2、spring啟動(dòng)流程的源碼分析:https://blog.csdn.net/qq_29235677/article/details/118458990
3、SpringApplication.run執(zhí)行流程詳解:https://blog.csdn.net/javaheheda/article/details/104963485

總結(jié)

以上是生活随笔為你收集整理的【学习笔记】springBoot中获取sping管理的bean的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。