From 8b2771a77a0beabdf257a03902c446a465409ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sun, 13 Jun 2021 15:59:45 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BD=BF=E7=94=A8=20BeanFactoryPostPr?= =?UTF-8?q?ocessor=20=E8=A7=A3=E5=86=B3=20SpringUtil=20=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E5=9C=A8=20`@PostConstruct`=20=E6=B3=A8=E8=A7=A3=E6=A0=87?= =?UTF-8?q?=E6=B3=A8=E7=9A=84=E6=96=B9=E6=B3=95=E4=B8=8B=E5=A4=B1=E6=95=88?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/extra/spring/SpringUtil.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/hutool-extra/src/main/java/cn/hutool/extra/spring/SpringUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/spring/SpringUtil.java index 5e2ca8359..ecb51dec2 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/spring/SpringUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/spring/SpringUtil.java @@ -2,6 +2,9 @@ package cn.hutool.extra.spring; import cn.hutool.core.lang.TypeReference; import cn.hutool.core.util.ArrayUtil; +import org.springframework.beans.BeansException; +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.ConfigurableApplicationContext; @@ -23,10 +26,20 @@ import java.util.Map; * @since 5.1.0 */ @Component -public class SpringUtil implements ApplicationContextAware { +public class SpringUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + + /** + * Spring应用上下文环境 + */ + private static ConfigurableListableBeanFactory beanFactory; private static ApplicationContext applicationContext; + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringUtil.beanFactory = beanFactory; + } + @Override public void setApplicationContext(ApplicationContext applicationContext) { SpringUtil.applicationContext = applicationContext; @@ -52,7 +65,7 @@ public class SpringUtil implements ApplicationContextAware { */ @SuppressWarnings("unchecked") public static T getBean(String name) { - return (T) applicationContext.getBean(name); + return (T) beanFactory.getBean(name); } /** @@ -63,7 +76,7 @@ public class SpringUtil implements ApplicationContextAware { * @return Bean对象 */ public static T getBean(Class clazz) { - return applicationContext.getBean(clazz); + return beanFactory.getBean(clazz); } /** @@ -75,7 +88,7 @@ public class SpringUtil implements ApplicationContextAware { * @return Bean对象 */ public static T getBean(String name, Class clazz) { - return applicationContext.getBean(name, clazz); + return beanFactory.getBean(name, clazz); } /** @@ -91,7 +104,7 @@ public class SpringUtil implements ApplicationContextAware { final ParameterizedType parameterizedType = (ParameterizedType) reference.getType(); final Class rawType = (Class) parameterizedType.getRawType(); final Class[] genericTypes = Arrays.stream(parameterizedType.getActualTypeArguments()).map(type -> (Class) type).toArray(Class[]::new); - final String[] beanNames = applicationContext.getBeanNamesForType(ResolvableType.forClassWithGenerics(rawType, genericTypes)); + final String[] beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(rawType, genericTypes)); return getBean(beanNames[0], rawType); } @@ -104,7 +117,7 @@ public class SpringUtil implements ApplicationContextAware { * @since 5.3.3 */ public static Map getBeansOfType(Class type) { - return applicationContext.getBeansOfType(type); + return beanFactory.getBeansOfType(type); } /** @@ -115,7 +128,7 @@ public class SpringUtil implements ApplicationContextAware { * @since 5.3.3 */ public static String[] getBeanNamesForType(Class type) { - return applicationContext.getBeanNamesForType(type); + return beanFactory.getBeanNamesForType(type); } /** @@ -162,8 +175,7 @@ public class SpringUtil implements ApplicationContextAware { * @since 5.4.2 */ public static void registerBean(String beanName, T bean) { - ConfigurableApplicationContext context = (ConfigurableApplicationContext) applicationContext; - context.getBeanFactory().registerSingleton(beanName, bean); + beanFactory.registerSingleton(beanName, bean); } }