我的尝试:
1、继承HttpServlet,在web.xml中配置servlet的1,项目启动时globalParaService被注入了,但是跟踪到init方法里面,globalParaService为null。(失败)
public class InitSysServlet extends HttpServlet {
private SysGlobalParaServiceI globalParaService;
@Autowired
public void setGlobalParaService(SysGlobalParaServiceI globalParaService) {
this.globalParaService = globalParaService;
}
@Override
public void init(ServletConfig config) throws ServletException {
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 extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
SysGlobalParaServiceI globalParaService = new SysGlobalParaServiceImpl();
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 extends HttpServlet {
private SysGlobalParaServiceI globalParaService;
@Override
public void init(ServletConfig config) throws ServletException {
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方法,代码如下:
@Component
public class InitSysServlet implements InitializingBean {
private SysGlobalParaServiceI globalParaService;
@Autowired
public void setGlobalParaService(SysGlobalParaServiceI globalParaService) {
this.globalParaService = globalParaService;
}
@Override
public void afterPropertiesSet() throws Exception {
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,代码如下:
@Component
public class InitSysServlet implements ApplicationListener {
private SysGlobalParaServiceI globalParaService;
@Autowired
public void setGlobalParaService(SysGlobalParaServiceI globalParaService) {
this.globalParaService = globalParaService;
}
@Override
public void onApplicationEvent(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。
随机推荐
JavaScript 变量声明提前
中指出:JavaScript变量在声明之前已经可用,JavaScript的这个特性被非正式的称为声明提前(hoisting),即JavaScript函数中声 ...
[转]shell脚本打印日志方法
该文章转自:http://blog.csdn.net/wylfengyujiancheng/article/details/50019299 ----------------------------- ...
Jdk1.8+Eclipse+MySql+Tomcat开发Java应用的环境搭建
Java学习开发的入门教程,方便大家在学习java开发过程中掌握最基本的环境搭建 有视频,有真相 http://www.chuanke.com/1340360-164338.html jdk是操作系统 ...
html5 canvas 旋转扩大
...c扩展调用php的函数(调用实现php函数的c函数)
上一次是写的c扩展调用c的标准函数,但是只能调用头文件中申明的函数,今天来说下c扩展调用实现php函数的c函数,比方说,c扩展要用到php中ip2long这个函数,但是c不可能去php中调用,肯定是去 ...
BootStrap导航栏的使用
默认的导航栏 创建一个默认的导航栏的步骤如下: 向 标签添加 class .navbar..navbar-default. 向上面的元素添加 role="naviga ...
深入理解计算机系统(4.2)------逻辑设计和硬件控制语言HCL
上一篇博客我们简单介绍了Y86指令集体系,而这篇博客我们将介绍指令集体系的逻辑设计和硬件控制语言HCL,为后面去实现Y86打下基础. 在硬件设计中,用电子电路来计算对位进行运算的函数,以及在各种存储器 ...
Exp2 后门原理与实践 20164320 王浩
一.实践基本内容 1.实践目标 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterpreter(或其他 ...
Linux学习笔记7
执行脚本篇章 r w x 读 写 执行 4 2 1 如果要启动tomcat 服务器 即执行 startup.sh脚本文件 1> #chmod 444 startup.sh 增加文本读权限 -r ...
[转]PID控制算法原理
PID控制算法是工业界使用极其广泛的一个负反馈算法,相信这个算法在做系统软件时也有用武之处,这里摘录了知乎上的一篇文章,后面学习更多后自己总结一篇 以下为原文: PID控制应该算是应用非常广泛的控制算 ...