当前位置: 代码迷 >> Web前端 >> 转当web中施用spring框架时,获得spring初始化的bean和ServletContext
  详细解决方案

转当web中施用spring框架时,获得spring初始化的bean和ServletContext

热度:353   发布时间:2012-07-15 20:11:29.0
转当web中应用spring框架时,获得spring初始化的bean和ServletContext

?

http://floys1987.iteye.com/blog/372111

这些天,一直在边学习,边做东西,发现,慢慢的补上了不少知识。今天发现了一个很有用的技巧,希望能给不知道的人,一点帮助。?

当在web启动后,spring已经初始化的bean,已经按照你的约束注入了。那么如何获取那些sigleton 的bean。 网上说, 可以用servlet来做,其实没有必要。?

第一种方法,慢一般是300+ms,可以说是多费一道手,不过,还是记录下来,也许有点意义。?

Java代码??收藏代码
  1. public?class?SpringBeans{??
  2. ????????private?static?ApplicationContext?factory;??
  3. ????private?static?ServletContext?sc?;??
  4. ??
  5. ??
  6. ????private?static?final?String?APPLICATION_CONTEXT?=?"\\WEB-INF\\applicationContext.xml";??
  7. ????private?static?final?String?DAO_CONTEXT?=?"\\WEB-INF\\daoHibernateContext.xml";??
  8. ??
  9. ????public?static?Object?getBean(String?beanID){??
  10. ????????factory?=?getFactory();??
  11. ????????return?factory.getBean(beanID);??
  12. ????}??
  13. ??????
  14. ????private?static?ApplicationContext?getFactory(){??
  15. ????????sc?=?MyServletContext.getServletContext();??
  16. ????????String?aAC?=?sc.getRealPath(APPLICATION_CONTEXT);??
  17. ????????String?aDC?=?sc.getRealPath(DAO_CONTEXT);??
  18. ????????ApplicationContext?tmpfactory?=?new?FileSystemXmlApplicationContext(??
  19. ????????????????new?String[]?{?aAC?,?aDC});??
  20. ????????return?tmpfactory;??
  21. ????}??
  22. }??
  23. //?当你取得的时候可以这样用??
  24. ??
  25. ????????(Object)bean?=?(Object)SpringBeans.getBean(beanID);??


这种做法,是我第一次的方法,后来,经过猛看javaDoc,又发现了一个好东西,(希望大家以后做东西也能猛看javaDoc,按照名字去看,也许你会找到些什么,虽然多数时候是迷茫)?

Java代码??收藏代码
  1. import?org.springframework.web.context.ContextLoader;??
  2. import?org.springframework.web.context.WebApplicationContext;??
  3. ??
  4. ????WebApplicationContext?wac?=?ContextLoader.getCurrentWebApplicationContext();??
  5. ????wac.getBean(beanID);??


WebApplicationContext 应该就是spring的sevlet(也许是linstener或别的,这方面我的基本功还不够,也许说错哦)启动后加载到servletContext中的东西。你"."一下这个对象你会发现,你想获得的好多东西都出来了。而且,再速度上好过第一种方法,它的获取速度,在用?
两次System.currentTimeMills()计时时,得出的结果是0ms。?

希望对没有找到答案,或是正在找这个答案的人有帮助。还有,它还能获得web程序的servletContext。?
Java代码??收藏代码
  1. WebApplicationContext?wac..;??
  2. wac.getServletContext(); ?

  相关解决方案