异常解决——获取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();
}
}
}
上一篇: 我的第一篇博客
下一篇: JAVA DES加解密工具类