欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-14 14:47:22
...

因为项目里面用到了动态获取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();
		}

	}

}