编程知识 cdmana.com

异常解决——获取Spring上下文AppplicationContextAware时applicationContext为null

因为项目里面用到了动态获取Bean的方式,所以考虑实现AppplicationContextAware的方式来获取Spring上下文。

但是最近服务器上经常出现 SpringUitl.getBean空指针的问题.,而且不是经常出现 代码如下:

package com.jingchen.ccsp.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringUtil implements ApplicationContextAware{
	
	private static ApplicationContext applicationContext;

	@Override
	public void setApplicationContext(ApplicationContext arg0) throws BeansException {
		
		if(applicationContext == null) applicationContext = arg0;
		
	}
	
	public static Object getBean(String name) {
		
		return applicationContext.getBean(name);
		
	} 

}

看了下实现,并没问题,网上也查了下,说是用注解的方式注入SpringUtil,在以jar的方式启动SpringBoot项目那么SpringUtil类必须放到启动类同级包目录。

不然有时候会获取为null

但是这样改动我觉得不友好,所以干脆把SpringUtil由注解的方式改成了xml声明的方式。并设置延时加载为false

<bean id="springUtil" class="com.jingchen.ccsp.util.SpringUtil" scope="singleton" lazy-init="false" />

重新打包启动,项目测试没问题!

我知道有人会问我,怎么SpringBoot配置spring的xml的加载。 具体如下:

package com.jingchen.ccsp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ImportResource(locations = {"classpath:config/Entrance.xml","classpath:spring/application-spring.xml"})
@SpringBootApplication
public class CmepApplication {

	public static void main(String[] args) {

		try {
			SpringApplication.run(CmepApplication.class, args);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[执笔记忆的空白]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1764732

Scroll to Top