本文主要是介绍Springboot中SpringUtil的applicationContext一直是null,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
applicationContext一直是null
以下代码一直抛null,然后仔细一查是applicationContext为null.
package com.example.cw_app_back.modular.context.login;import cn.hutool.extra.spring.SpringUtil;
import com.example.cw_app_back.modular.context.login.service.LoginContext;
import com.example.cw_app_back.modular.context.login.service.impl.LoginContextImpl;
import com.fasterxml.jackson.databind.util.BeanUtil;/*** 当前登录用户信息获取的接口**/
public class LoginContextHolder {public static LoginContext me() {return SpringUtil.getBean(LoginContextImpl.class);}}
SpringUtil 代码如下
package cn.hutool.extra.spring;import cn.hutool.core.util.ArrayUtil;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;import java.util.Map;/*** Spring(Spring boot)工具封装,包括:** <pre>* 1、Spring IOC容器中的bean对象获取* </pre>** @author loolly* @since 5.1.0*/
@Component
public class SpringUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) {SpringUtil.applicationContext = applicationContext;}/*** 获取applicationContext** @return ApplicationContext*/public static ApplicationContext getApplicationContext() {return applicationContext;}//通过name获取 Bean./*** 通过name获取 Bean** @param <T> Bean类型* @param name Bean名称* @return Bean*/@SuppressWarnings("unchecked")public static <T> T getBean(String name) {return (T) applicationContext.getBean(name);}/*** 通过class获取Bean** @param <T> Bean类型* @param clazz Bean类* @return Bean对象*/public static <T> T getBean(Class<T> clazz) {return applicationContext.getBean(clazz);}/*** 通过name,以及Clazz返回指定的Bean** @param <T> bean类型* @param name Bean名称* @param clazz bean类型* @return Bean对象*/public static <T> T getBean(String name, Class<T> clazz) {return applicationContext.getBean(name, clazz);}/*** 获取指定类型对应的所有Bean,包括子类** @param <T> Bean类型* @param type 类、接口,null表示获取所有bean* @return 类型对应的bean,key是bean注册的name,value是Bean* @since 5.3.3*/public static <T> Map<String, T> getBeansOfType(Class<T> type){return applicationContext.getBeansOfType(type);}/*** 获取指定类型对应的Bean名称,包括子类* @param type 类、接口,null表示获取所有bean名称* @return bean名称* @since 5.3.3*/public static String[] getBeanNamesForType(Class<?> type){return applicationContext.getBeanNamesForType(type);}/*** 获取配置文件配置项的值** @param key 配置项key* @return 属性值* @since 5.3.3*/public static String getProperty(String key) {return applicationContext.getEnvironment().getProperty(key);}/*** 获取当前的环境配置,无配置返回null** @return 当前的环境配置* @since 5.3.3*/public static String[] getActiveProfiles(){return applicationContext.getEnvironment().getActiveProfiles();}/*** 获取当前的环境配置,当有多个环境配置时,只获取第一个** @return 当前的环境配置* @since 5.3.3*/public static String getActiveProfile(){final String[] activeProfiles = getActiveProfiles();return ArrayUtil.isNotEmpty(activeProfiles) ? activeProfiles[0] : null;}
}
启动类:
package com.example.cw_app_back;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;import javax.annotation.PostConstruct;
import java.util.TimeZone;@SpringBootApplication
@MapperScan(basePackages = "com.example.cw_app_back.**.mapper")
@ServletComponentScan
public class CwAppBackApplication extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(CwAppBackApplication.class, args);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(this.getClass());}}
但是debug的时候发现这个SpringUtil一直都没进去过.不知道为什么这个Component一直没扫到,注入不进去.但是看看启动类好像没啥毛病啊.
解决:
自己又在自己的包下面写了一遍一模一样的SpringUtil ,然后调用自己的SpringUtil,自己的SpringUtil会注入成功的,也算是解决了,但是很迷茫为什么读不到hutool的SpringUtil,为什么不认.
这篇关于Springboot中SpringUtil的applicationContext一直是null的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!