From 2e31e2a372a7225336e1d835b85504d96f6e7688 Mon Sep 17 00:00:00 2001 From: qraddx Date: Tue, 15 Feb 2022 14:34:53 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20Introducing=20new=20features.=20cl?= =?UTF-8?q?ose=20#3613=20=E4=BD=BF=E7=94=A8=20hutool-bom=20=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E5=AE=9A=E4=B9=89=E5=B7=A5=E5=85=B7=E7=B1=BB=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/util/SpringContextHolder.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/SpringContextHolder.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/SpringContextHolder.java index 89374271b..558d63a64 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/SpringContextHolder.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/SpringContextHolder.java @@ -20,7 +20,11 @@ package com.pig4cloud.pigx.common.core.util; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEvent; @@ -36,7 +40,9 @@ import java.util.Map; @Slf4j @Service @Lazy(false) -public class SpringContextHolder implements ApplicationContextAware, DisposableBean { +public class SpringContextHolder implements BeanFactoryPostProcessor, ApplicationContextAware, DisposableBean { + + private static ConfigurableListableBeanFactory beanFactory; private static ApplicationContext applicationContext = null; @@ -47,6 +53,14 @@ public class SpringContextHolder implements ApplicationContextAware, DisposableB return applicationContext; } + /** + * BeanFactoryPostProcessor, 注入Context到静态变量中. + */ + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException { + SpringContextHolder.beanFactory = factory; + } + /** * 实现ApplicationContextAware接口, 注入Context到静态变量中. */ @@ -55,26 +69,30 @@ public class SpringContextHolder implements ApplicationContextAware, DisposableB SpringContextHolder.applicationContext = applicationContext; } + public static ListableBeanFactory getBeanFactory() { + return null == beanFactory ? applicationContext : beanFactory; + } + /** * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. */ @SuppressWarnings("unchecked") public static T getBean(String name) { - return (T) applicationContext.getBean(name); + return (T) getBeanFactory().getBean(name); } /** * 从静态变量applicationContext中取得Bean, Map */ public static Map getBeansOfType(Class type) { - return applicationContext.getBeansOfType(type); + return getBeanFactory().getBeansOfType(type); } /** * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. */ public static T getBean(Class requiredType) { - return applicationContext.getBean(requiredType); + return getBeanFactory().getBean(requiredType); } /**