美文网首页
springmvc项目中直接获取Bean

springmvc项目中直接获取Bean

作者: superzhan1992 | 来源:发表于2017-05-23 19:35 被阅读0次

    近期在做项目的时候,需要用到一个定时器来处理一个定时任务,而定时任务又需要操作数据库,而这里我用了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开发小菜鸟,路过发现有什么错误的地方,烦请提出来,谢谢!)----

相关文章

网友评论

      本文标题:springmvc项目中直接获取Bean

      本文链接:https://www.haomeiwen.com/subject/epygxxtx.html