转当web中应用spring框架时,获得spring初始化的bean和ServletContext
?
http://floys1987.iteye.com/blog/372111
这些天,一直在边学习,边做东西,发现,慢慢的补上了不少知识。今天发现了一个很有用的技巧,希望能给不知道的人,一点帮助。?
当在web启动后,spring已经初始化的bean,已经按照你的约束注入了。那么如何获取那些sigleton 的bean。 网上说, 可以用servlet来做,其实没有必要。?
第一种方法,慢一般是300+ms,可以说是多费一道手,不过,还是记录下来,也许有点意义。?
- public?class?SpringBeans{??
- ????????private?static?ApplicationContext?factory;??
- ????private?static?ServletContext?sc?;??
- ??
- ??
- ????private?static?final?String?APPLICATION_CONTEXT?=?"\\WEB-INF\\applicationContext.xml";??
- ????private?static?final?String?DAO_CONTEXT?=?"\\WEB-INF\\daoHibernateContext.xml";??
- ??
- ????public?static?Object?getBean(String?beanID){??
- ????????factory?=?getFactory();??
- ????????return?factory.getBean(beanID);??
- ????}??
- ??????
- ????private?static?ApplicationContext?getFactory(){??
- ????????sc?=?MyServletContext.getServletContext();??
- ????????String?aAC?=?sc.getRealPath(APPLICATION_CONTEXT);??
- ????????String?aDC?=?sc.getRealPath(DAO_CONTEXT);??
- ????????ApplicationContext?tmpfactory?=?new?FileSystemXmlApplicationContext(??
- ????????????????new?String[]?{?aAC?,?aDC});??
- ????????return?tmpfactory;??
- ????}??
- }??
- ??
- ??
- ????????(Object)bean?=?(Object)SpringBeans.getBean(beanID);??
这种做法,是我第一次的方法,后来,经过猛看javaDoc,又发现了一个好东西,(希望大家以后做东西也能猛看javaDoc,按照名字去看,也许你会找到些什么,虽然多数时候是迷茫)?
- import?org.springframework.web.context.ContextLoader;??
- import?org.springframework.web.context.WebApplicationContext;??
- ??
- ????WebApplicationContext?wac?=?ContextLoader.getCurrentWebApplicationContext();??
- ????wac.getBean(beanID);??
WebApplicationContext 应该就是spring的sevlet(也许是linstener或别的,这方面我的基本功还不够,也许说错哦)启动后加载到servletContext中的东西。你"."一下这个对象你会发现,你想获得的好多东西都出来了。而且,再速度上好过第一种方法,它的获取速度,在用?
两次System.currentTimeMills()计时时,得出的结果是0ms。?
希望对没有找到答案,或是正在找这个答案的人有帮助。还有,它还能获得web程序的servletContext。?
- WebApplicationContext?wac..;??
- wac.getServletContext(); ?