spring初始化在ServletContextListener实现类中获取spring注入对象
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!
由于项目须要,需在ServletContextListener监听接口实现类中调用spring注入的对象,以获得系统初始化参数.代码如下:
import java.io.IOException; import java.util.List; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import pams.model.Device; import pams.service.Impl.DeviceManage; import pams.socket.TcpManager; import pams.socket.TcpServer; /** * 系统初始化 * @author 恶灵骑士 * */ public class SysInitServlet implements ServletContextListener { //获得spring注入的bean对象 private WebApplicationContext springContext; private DeviceManage deviceManager; //数据采集仪服务线程 TcpServer daqServer = null; //继电器服务线程 TcpServer realyServer = null; //Tcp连接管理器 Thread tcpManager = null; public SysInitServlet(){ super(); } /** *应用程序退出时调用 */ @Override public void contextDestroyed(ServletContextEvent event) { serverDestroyed(); System.out.println("应用程序关闭!"); } /** * 应用程序加载时调用 */ @Override public void contextInitialized(ServletContextEvent event) { springContext = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()); if(springContext != null){ deviceManager = (DeviceManage)springContext.getBean("deviceManage"); }else{ System.out.println("获得应用程序上下文失败!"); return; } System.out.println("初始化系统服务!"); serverInitialized(); System.out.println("TcpServer初始化完成!"); } /** * 系统服务初始化 * device_type:由于只须要知道采集仪,继电器端口号 * 所以device_type设置为0 */ public void serverInitialized(){ if(deviceManager == null){ System.out.println("获得设备管理器失败!"); return; } List<Device> devices = this.deviceManager.load(0); for(Device device : devices){ System.out.println("设备ID-->"+device.getId()); System.out.println("采集仪端口号-->"+device.getProperty1()); System.out.println("继电器端口号-->"+device.getProperty2()); System.out.println("所属大棚-->"+device.getShed().getName()); } //开启串口服务器-数据采集仪监听线程 TcpServer daqServer = new TcpServer(5678); TcpServer realyServer = new TcpServer(5679); tcpManager = new Thread(new TcpManager()); if(daqServer.getServer() != null) { new Thread(daqServer).start(); } if(realyServer.getServer()!=null){ new Thread(realyServer).start(); } tcpManager.start(); } /** * 系统服务注销 */ @SuppressWarnings("deprecation") public void serverDestroyed(){ if(daqServer!=null){ try { daqServer.getServer().close(); } catch (IOException e) { System.out.println("数据采集仪服务线程关闭犯错 --> "+e.getMessage()); } } if(realyServer!=null){ try { realyServer.getServer().close(); } catch (IOException e) { System.out.println("继电器服务线程关闭犯错 --> "+e.getMessage()); } } if(tcpManager!=null){ tcpManager.stop(); } } }
喜欢海,不管湛蓝或是光灿,不管平静或是波涛汹涌,那起伏荡漾的,那丝丝的波动;喜欢听海的声音,不管是浪击礁石,或是浪涛翻滚,那轻柔的,那澎湃的;喜欢看海,不管心情是舒畅的或是沉闷的,不管天气是晴朗的或是阴沉的,那舒心的,那松弛的……
springContext为spring管理的应用程序上下文,里面存储spring管理的各种bean对象.deviceManager就是通过spring注入的设备控制业务层.
注意事项:
1. 由于实现的是ServletContextListener接口,故须要实现public void contextInitialized(ServletContextEvent event)方法和public void contextDestroyed(ServletContextEvent event)方法.前者在应用程序加载时调用,里面添加一些初始化业务.如初始化springContext,调用serverInitialized()完成系统服务初始化,后者用于应用程序关闭时调用,主要完成服务资源的注销.
既然是listener接口就要在web.xml中配置相关参数,如下:
<listener>
<listener-class>pams.servlet.SysInitServlet</listener-class>
</listener>
2. 由于需获得spring管理bean,故该listner配置须要放在spring监听器配置之后,以使spring完成初始化,如下:
<!--Spring ApplicationContext载入--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Spring ApplicationContext配置文件的路径,此参数用于后面的Spring-Contextloader --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:beans.xml</param-value> </context-param> <!-- 系统服务初始化 --> <listener> <listener-class>pams.servlet.SysInitServlet</listener-class> </listener>
如果想在外部类中调用通过这类方法失掉的spring对象,可以把springContext设为static,然后提供响应的get方法,此处由于不须要故设为private...
文章结束给大家分享下程序员的一些笑话语录: 联想——对内高价,补贴对外倾销的伟大“民族”企业。
--------------------------------- 原创文章 By
spring和初始化
---------------------------------
spring初始化在ServletContextListener实现类中获取spring注入对象相关推荐
- 在ServletContextListener实现类中获取spring注入对象
由于项目需要,需在ServletContextListener监听接口实现类中调用spring注入的对象,以获取系统初始化参数.代码如下: [java] view plain copy import ...
- 【SpringBoot】在普通类中获取spring容器中的bean
这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...
- 在普通类中获取spring容器中的bean
在普通类中获取spring容器中的bean 1.工具类 package com.itheima.hchat.util;import org.springframework.beans.BeansExc ...
- spring aop如何在切面类中获取切入点相关方法的参数、方法名、返回值、异常等信息
aop思想可以很好的帮助我们实现代码的解耦,比如我们之前提到的,将日志代码与业务层代码完全独立,通过spring aop的代理类进行整合.在切面类中,我们也能够通过spring提供的接口,很好的获取原 ...
- java 普通类request_[Java教程]spring在普通类中获取session和request
[Java教程]spring在普通类中获取session和request 0 2014-08-12 08:01:13 在使用spring时,经常需要在普通类中获取session,request等对像. ...
- java-在应用中获取spring定义的bean
因为写了些bean作为quartz的任务用spring配置了,但有些时候需要在别的类中使用这些bean,没有太仔细去研究spring,依稀记得有个getBean,到网上g了一把,发现方法不止一种,选了 ...
- java 获取继承字段_java – 从类中获取所有字段(甚至是私有的和继承的)
我在做大学项目. 我需要从类中获取所有字段.甚至私人和继承.我试图获取所有声明字段,然后投射到超类并重复. 我的代码片段: private void listAllFields(Object obj) ...
- 枚举类中获取枚举值的几种方法
在开发的过程中我们经常会定义枚举类,枚举类中获取枚举值的方式也有很多种,下面我们就探究一下大家常用的几种方式: 枚举类 public enum TestEnum {ONE(1,"one&qu ...
- html中可以添加几个类,从一个类中向一个HtmlHead对象添加多个元素
我有一个页面的网站.我有4页所有页面都使用的主页面.每个页面使用不同的CSS和JavaScript头部标签内部.我想通过调用引用数据库表的类来添加标题,元描述和元关键字标记.但是,我无法找到一种方法将 ...
最新文章
- day1简述、输入输出、运算符、条件语句、文件读写、三元运算
- Oracle 11g新特性之--只读表(read only table)
- java Graphics2D类
- 标准C++中的string类的用法总结(转)
- python绘图工具基础-matplotlib学习之基本使用
- 两届诺贝尔文学奖得主将同时公布
- Complex类与运算符重载
- 控制div的大小自适应_干货 | 浅谈模糊自适应PID控制
- 两台XP系统电脑用双网卡共享上网操作
- vue自动化单元测试
- C++_模板全特化、偏特化
- rabbitmq使用_RabbitMQ 简介以及使用场景
- Linux下实现Rsync目录同步备份
- php paypal网站对接,php 接入 paypal 支付
- 三国志·魏书·牵招传
- Android 子线程 UI 操作真的不可以?
- LLVM 系统入门¶
- thinkphp5.0的查询方法 where in 性能问题以及优化措施
- 弃用server酱 自建个人消息推送
- 强化云原生基础服务,焱融科技 YRCloudFile 与秒云完成产品兼容性互认证
热门文章
- 解决常见接口跨域问题
- 一键解决 500、502和504 Internal Privoxy Error 问题(图文详解)
- Spring Boot : Whitelabel Error Page解决方案
- .NET Core,.NET Framework和Xamarin有什么区别?
- 如何在终端窗口中在Linux中创建文件?
- 使TextView在Android上可滚动
- java的程序概念_Java程序基本概念
- windows安装docker后启动报错无法下载镜像文件Error with pre-create check: “Get https://github-production-release-ass
- Calendar与Date用法示例
- 常见移动机器人轮直径校准