我的尝试:
1、继承HttpServlet,在web.xml中配置servlet的1,项目启动时globalParaService被注入了,但是跟踪到init方法里面,globalParaService为null。(失败)
public class InitSysServlet extendsHttpServlet {privateSysGlobalParaServiceI globalParaService;
@Autowiredpublic voidsetGlobalParaService(SysGlobalParaServiceI globalParaService) {this.globalParaService =globalParaService;
}
@Overridepublic void init(ServletConfig config) throwsServletException {super.init(config);
SysGlobalPara codeRule=globalParaService.getCodeRule();if (null !=codeRule) {
SystemConfig.IS_SET_WIZADED= "true".equals(codeRule.getSysValue());
}else{
SystemConfig.IS_SET_WIZADED= false;
}
}
}
然后,我试着手动创建globalParaService,代码调整为
public class InitSysServlet extendsHttpServlet {
@Overridepublic void init(ServletConfig config) throwsServletException {super.init(config);
SysGlobalParaServiceI globalParaService= newSysGlobalParaServiceImpl();
SysGlobalPara codeRule=globalParaService.getCodeRule();if (null !=codeRule) {
SystemConfig.IS_SET_WIZADED= "true".equals(codeRule.getSysValue());
}else{
SystemConfig.IS_SET_WIZADED= false;
}
}
}
然而,SysGlobalParaServiceImpl里面依赖的其他由Spring注入的对象为null。
搞不定了,百度到以上两篇文章,根据上面文章进行尝试都成功了。
2、直接在init方法中获取Spring的bean (成功)
首先在Spring配置文件中配置SysGlobalParaServiceImpl类对应的bean,然后在代码中获取,最终代码如下:
public class InitSysServlet extendsHttpServlet {privateSysGlobalParaServiceI globalParaService;
@Overridepublic void init(ServletConfig config) throwsServletException {super.init(config);
WebApplicationContext wac=ContextLoader.getCurrentWebApplicationContext();
globalParaService= (SysGlobalParaServiceI) wac.getBean("gpservice");
SysGlobalPara codeRule=globalParaService.getCodeRule();if (null !=codeRule) {
SystemConfig.IS_SET_WIZADED= "true".equals(codeRule.getSysValue());
}else{
SystemConfig.IS_SET_WIZADED= false;
}
}
}
以下两种则与servlet无关,而是继承spring提供的接口。
3、实现Spring的接口InitializingBean,则实现类在被Sping初始化之后,会调用其中的afterPropertiesSet方法,代码如下:
@Componentpublic class InitSysServlet implementsInitializingBean {privateSysGlobalParaServiceI globalParaService;
@Autowiredpublic voidsetGlobalParaService(SysGlobalParaServiceI globalParaService) {this.globalParaService =globalParaService;
}
@Overridepublic void afterPropertiesSet() throwsException {
SysGlobalPara codeRule=globalParaService.getCodeRule();if (null !=codeRule) {
SystemConfig.IS_SET_WIZADED= "true".equals(codeRule.getSysValue());
}else{
SystemConfig.IS_SET_WIZADED= false;
}
}
}
4、实现Spring的接口ApplicationListener,在所有的bean初始化之后会调用其中的方法onApplicationEvent,代码如下:
@Componentpublic class InitSysServlet implements ApplicationListener{privateSysGlobalParaServiceI globalParaService;
@Autowiredpublic voidsetGlobalParaService(SysGlobalParaServiceI globalParaService) {this.globalParaService =globalParaService;
}
@Overridepublic voidonApplicationEvent(ContextRefreshedEvent arg0) {
SysGlobalPara codeRule=globalParaService.getCodeRule();if (null !=codeRule) {
SystemConfig.IS_SET_WIZADED= "true".equals(codeRule.getSysValue());
}else{
SystemConfig.IS_SET_WIZADED= false;
}
}
}
最后,我采用的是第4中,实现Spring的接口ApplicationListener。