项目中需要手写一个获取处理类的工具HandlerContext,但是在运行时调用getBean方法时,发现applicationContext为null。后续观察发现在项目启动是并没有执行setApplicationContext方法,也就是HandlerContext没有加载。HandlerContext类代码如下:
package com.**.handler;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;
@Service
public class HandlerContext implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
HandlerContext.applicationContext = applicationContext;
}
public HandlerContext() {
}
public Object getBean(String beanClass) {
return applicationContext.getBean(beanClass);
}
}
解决方法:
新增一个JavaBeen的配置类,显式注册HandlerContext ,代码如下
package com.rmitec.aps.handler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HandlerContextConfig {
@Bean
public HandlerContext getHandlerContext() {
return new HandlerContext();
}
}
另,需要注意的是HandlerContext 类中@Service不可省略