1.先写个工具类,实现
ApplicationContextAware
接口,然后他会把ApplicationContext对象传给你,在setApplicationContext方法里已经把ApplicationContext传给你了,然后去完成初始化。
public class SpringContextUtil implementsApplicationContextAware{
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContextapplicationContext){
SpringContextUtil.applicationContext =applicationContext;
}
public static ApplicationContextgetApplicationContext(){
return applicationContext;
}
public static Object getBean(String name) throwsBeansException{
return applicationContext.getBean(name);
}
}
2.
applicationContext也需要注入否则报
NullPointException
,
在spring配置文件applicationContext.xml中配置如下:
<bean id="springContextUtil"class="com.sinosoft.sepmis.util.SpringContextUtil"lazy-init="false"></bean>
3.在代码中使用:
private static LoggerUtilService loggerUtilService;
loggerUtilService =(LoggerUtilService)SpringContextUtil.getBean("loggerUtilService");
4.注意:
解释下第2条中配置为啥要加
lazy-init="false"
在你的spring配置文件中一般会有
default-default-lazy-init="true" 这句话。
该属性默认为false状态
,这样导致spring在启动过程导致在启动时候,会默认加载整个对象实例图,从初始化ACTION配置、到service配置到dao配置、乃至到数据库连接、事务等等。
spring的启动会很慢所以在开发时都会改为true,延迟加载,然后就是会报
NullPointException。
注入 加上lazy-init="false" 可以保证 立即加载。