查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

由于项目须要,需在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注入对象相关推荐

  1. 在ServletContextListener实现类中获取spring注入对象

    由于项目需要,需在ServletContextListener监听接口实现类中调用spring注入的对象,以获取系统初始化参数.代码如下: [java] view plain copy import  ...

  2. 【SpringBoot】在普通类中获取spring容器中的bean

    这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...

  3. 在普通类中获取spring容器中的bean

    在普通类中获取spring容器中的bean 1.工具类 package com.itheima.hchat.util;import org.springframework.beans.BeansExc ...

  4. spring aop如何在切面类中获取切入点相关方法的参数、方法名、返回值、异常等信息

    aop思想可以很好的帮助我们实现代码的解耦,比如我们之前提到的,将日志代码与业务层代码完全独立,通过spring aop的代理类进行整合.在切面类中,我们也能够通过spring提供的接口,很好的获取原 ...

  5. java 普通类request_[Java教程]spring在普通类中获取session和request

    [Java教程]spring在普通类中获取session和request 0 2014-08-12 08:01:13 在使用spring时,经常需要在普通类中获取session,request等对像. ...

  6. java-在应用中获取spring定义的bean

    因为写了些bean作为quartz的任务用spring配置了,但有些时候需要在别的类中使用这些bean,没有太仔细去研究spring,依稀记得有个getBean,到网上g了一把,发现方法不止一种,选了 ...

  7. java 获取继承字段_java – 从类中获取所有字段(甚至是私有的和继承的)

    我在做大学项目. 我需要从类中获取所有字段.甚至私人和继承.我试图获取所有声明字段,然后投射到超类并重复. 我的代码片段: private void listAllFields(Object obj) ...

  8. 枚举类中获取枚举值的几种方法

    在开发的过程中我们经常会定义枚举类,枚举类中获取枚举值的方式也有很多种,下面我们就探究一下大家常用的几种方式: 枚举类 public enum TestEnum {ONE(1,"one&qu ...

  9. html中可以添加几个类,从一个类中向一个HtmlHead对象添加多个元素

    我有一个页面的网站.我有4页所有页面都使用的主页面.每个页面使用不同的CSS和JavaScript头部标签内部.我想通过调用引用数据库表的类来添加标题,元描述和元关键字标记.但是,我无法找到一种方法将 ...

最新文章

  1. day1简述、输入输出、运算符、条件语句、文件读写、三元运算
  2. Oracle 11g新特性之--只读表(read only table)
  3. java Graphics2D类
  4. 标准C++中的string类的用法总结(转)
  5. python绘图工具基础-matplotlib学习之基本使用
  6. 两届诺贝尔文学奖得主将同时公布
  7. Complex类与运算符重载
  8. 控制div的大小自适应_干货 | 浅谈模糊自适应PID控制
  9. 两台XP系统电脑用双网卡共享上网操作
  10. vue自动化单元测试
  11. C++_模板全特化、偏特化
  12. rabbitmq使用_RabbitMQ 简介以及使用场景
  13. Linux下实现Rsync目录同步备份
  14. php paypal网站对接,php 接入 paypal 支付
  15. 三国志·魏书·牵招传
  16. Android 子线程 UI 操作真的不可以?
  17. LLVM 系统入门¶
  18. thinkphp5.0的查询方法 where in 性能问题以及优化措施
  19. 弃用server酱 自建个人消息推送
  20. 强化云原生基础服务,焱融科技 YRCloudFile 与秒云完成产品兼容性互认证

热门文章

  1. 解决常见接口跨域问题
  2. 一键解决 500、502和504 Internal Privoxy Error 问题(图文详解)
  3. Spring Boot : Whitelabel Error Page解决方案
  4. .NET Core,.NET Framework和Xamarin有什么区别?
  5. 如何在终端窗口中在Linux中创建文件?
  6. 使TextView在Android上可滚动
  7. java的程序概念_Java程序基本概念
  8. windows安装docker后启动报错无法下载镜像文件Error with pre-create check: “Get https://github-production-release-ass
  9. Calendar与Date用法示例
  10. 常见移动机器人轮直径校准