springmvc项目中直接获取Bean

    近期在做项目的时候,需要用到一个定时器来处理一个定时任务,而定时任务又需要操作数据库,而这里我用了JDK自带的TimerTask和Timer处理的,所以需要在TimerTask类中获取具体的service或者dao Bean。

实现思路,大体分为监听项目启动事件、获取spring项目全局上下文、获取具体的Bean 三步:

1、监听项目启动事件:

这个有好几种方法,这里用的是实现ServletContextListener(javax.servlet.ServletContextListener)接口的监听器,然后实现该接口的几个方法(

contextInitialized--监听项目启动初始化。然后要在项目中注册这个监听器,即在web.xml中配置个listener,class指向该类。

这里有个坑点:web.xml中定义这个listener的时候,它的位置一定要在项目加载核心配置文件之后!!!即位置至少要在contextConfigLocation这个context-param之后,或者之后获取的Context将会为null!


2、获取spring项目全局上下文:

注册过监听器之后,要在contextInitialized方法中通过WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)方法获取WebApplicationContext对象,这样我们就获取到我们想要的全局项目对象了(当然实现这个功能还有别的方法,大家有兴趣可以研究下),为了方便项目中使用可以在这个类中定义一个私有静态的WebApplicationContext对象,并提供一个公开的get方法。


3、获取具体的Bean

之后我们就可以在TimerTask类中获取WebApplicationContext对象,通过调用getBean方法获取想要的Bean了,getBean有多个重载方法,可以根据需要,选择适合自己的那个。


补充:我们定义好的TimerTask类,也可以在第一步定义的那个监听器的contextInitialized方法中进行注册,这样也可以保证项目启动的时候定时任务开始等待执行。


----(java开发小菜鸟,路过发现有什么错误的地方,烦请提出来,谢谢!)----

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring容器高层视图 Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相...
    Theriseof阅读 7,831评论 1 24
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,131评论 6 342
  • 你要知道的SpringMVC启动流程和源码分析都在这里 转载请注明出处 http://www.jianshu.co...
    WWWWDotPNG阅读 18,775评论 8 66
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,061评论 19 139
  • 设计模式从入门到放弃系列 01 -- UML 基础 StarUML UML 主要类别 UML 作为一个标准,有很多...
    内心强大的Jim阅读 3,382评论 0 0

友情链接更多精彩内容