`
lushuaiyin
  • 浏览: 675266 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java_web开发_SSH spring中取得Bean实例的方法 .(很强大,不能不转)

 
阅读更多

获得spring里注册Bean的四种方法,特别是第三种方法,简单:
一:方法一(多在struts框架中)继承BaseDispatchAction


  1. importcom.mas.wawacommunity.wap.service.UserManager;
  2. publicclassBaseDispatchActionextendsDispatchAction{
  3. /**
  4. *web应用上下文环境变量
  5. */
  6. protectedWebApplicationContextctx;
  7. protectedUserManageruserMgr;
  8. /**
  9. *获得注册Bean
  10. *@parambeanNameString注册Bean的名称
  11. *@return
  12. */
  13. protectedfinalObjectgetBean(StringbeanName){
  14. returnctx.getBean(beanName);
  15. }
  16. protectedActionForwardunspecified(ActionMappingmapping,ActionFormform,
  17. javax.servlet.http.HttpServletRequestrequest,
  18. javax.servlet.http.HttpServletResponseresponse){
  19. returnmapping.findForward("index");
  20. }
  21. publicvoidsetServlet(ActionServletservlet){
  22. this.servlet=servlet;
  23. this.ctx=WebApplicationContextUtils.getWebApplicationContext(servlet.getServletContext());
  24. this.userMgr=(UserManager)getBean("userManager");
  25. }
  26. }


二:方法二实现BeanFactoryAware
一定要在spring.xml中加上:
<bean id="serviceLocator" class="项目中ServiceLocator的类路径比如:com.am.oa.commons.service.SpringContextUtil " singleton="true" />
当对serviceLocator实例时就自动设置BeanFactory,以便后来可直接用beanFactory


  1. publicclassServiceLocatorimplementsBeanFactoryAware{
  2. privatestaticBeanFactorybeanFactory=null;
  3. privatestaticServiceLocatorservlocator=null;
  4. publicvoidsetBeanFactory(BeanFactoryfactory)throwsBeansException{
  5. this.beanFactory=factory;
  6. }
  7. publicBeanFactorygetBeanFactory(){
  8. returnbeanFactory;
  9. }
  10. publicstaticServiceLocatorgetInstance(){
  11. if(servlocator==null)
  12. servlocator=(ServiceLocator)beanFactory.getBean("serviceLocator");
  13. returnservlocator;
  14. }
  15. /**
  16. *根据提供的bean名称得到相应的服务类
  17. *@paramservNamebean名称
  18. */
  19. publicstaticObjectgetService(StringservName){
  20. returnbeanFactory.getBean(servName);
  21. }
  22. /**
  23. *根据提供的bean名称得到对应于指定类型的服务类
  24. *@paramservNamebean名称
  25. *@paramclazz返回的bean类型,若类型不匹配,将抛出异常
  26. */
  27. publicstaticObjectgetService(StringservName,Classclazz){
  28. returnbeanFactory.getBean(servName,clazz);
  29. }
  30. }


action调用:


  1. publicclassUserActionextendsBaseActionimplementsAction,ModelDriven{
  2. privateUsersuser=newUsers();
  3. protectedServiceLocatorservice=ServiceLocator.getInstance();
  4. UserServiceuserService=(UserService)service.getService("userService");
  5. publicStringexecute()throwsException{
  6. returnSUCCESS;
  7. }
  8. publicObjectgetModel(){
  9. returnuser;
  10. }
  11. publicStringgetAllUser(){
  12. HttpServletRequestrequest=ServletActionContext.getRequest();
  13. Listls=userService.LoadAllObject(Users.class);
  14. request.setAttribute("user",ls);
  15. this.setUrl("/yonghu.jsp");
  16. returnSUCCESS;
  17. }
  18. }


三:方法三实现ApplicationContextAware
一定要在spring.xml中加上:
<bean id="SpringContextUtil " class="项目中applicationContext的类路径比如:com.am.oa.commons.service.SpringContextUtil " singleton="true" />
当对SpringContextUtil 实例时就自动设置applicationContext,以便后来可直接用applicationContext

  1. publicclassSpringContextUtilimplementsApplicationContextAware{
  2. privatestaticApplicationContextapplicationContext;//Spring应用上下文环境
  3. /**
  4. *实现ApplicationContextAware接口的回调方法,设置上下文环境
  5. *@paramapplicationContext
  6. *@throwsBeansException
  7. */
  8. publicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{
  9. SpringContextUtil.applicationContext=applicationContext;
  10. }
  11. /**
  12. *@returnApplicationContext
  13. */
  14. publicstaticApplicationContextgetApplicationContext(){
  15. returnapplicationContext;
  16. }
  17. /**
  18. *获取对象
  19. *@paramname
  20. *@returnObject一个以所给名字注册的bean的实例
  21. *@throwsBeansException
  22. */
  23. publicstaticObjectgetBean(Stringname)throwsBeansException{
  24. returnapplicationContext.getBean(name);
  25. }
  26. /**
  27. *获取类型为requiredType的对象
  28. *如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)
  29. *@paramnamebean注册名
  30. *@paramrequiredType返回对象类型
  31. *@returnObject返回requiredType类型对象
  32. *@throwsBeansException
  33. */
  34. publicstaticObjectgetBean(Stringname,ClassrequiredType)throwsBeansException{
  35. returnapplicationContext.getBean(name,requiredType);
  36. }
  37. /**
  38. *如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
  39. *@paramname
  40. *@returnboolean
  41. */
  42. publicstaticbooleancontainsBean(Stringname){
  43. returnapplicationContext.containsBean(name);
  44. }
  45. /**
  46. *判断以给定名字注册的bean定义是一个singleton还是一个prototype。
  47. *如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
  48. *@paramname
  49. *@returnboolean
  50. *@throwsNoSuchBeanDefinitionException
  51. */
  52. publicstaticbooleanisSingleton(Stringname)throwsNoSuchBeanDefinitionException{
  53. returnapplicationContext.isSingleton(name);
  54. }
  55. /**
  56. *@paramname
  57. *@returnClass注册对象的类型
  58. *@throwsNoSuchBeanDefinitionException
  59. */
  60. publicstaticClassgetType(Stringname)throwsNoSuchBeanDefinitionException{
  61. returnapplicationContext.getType(name);
  62. }
  63. /**
  64. *如果给定的bean名字在bean定义中有别名,则返回这些别名
  65. *@paramname
  66. *@return
  67. *@throwsNoSuchBeanDefinitionException
  68. */
  69. publicstaticString[]getAliases(Stringname)throwsNoSuchBeanDefinitionException{
  70. returnapplicationContext.getAliases(name);
  71. }
  72. }

action调用:

  1. packagecom.anymusic.oa.webwork;
  2. importjava.util.List;
  3. importjava.util.Map;
  4. importjavax.servlet.http.HttpServletRequest;
  5. importcom.anymusic.oa.commons.service.ServiceLocator;
  6. importcom.anymusic.oa.hibernate.pojo.Role;
  7. importcom.anymusic.oa.hibernate.pojo.Users;
  8. importcom.anymusic.oa.spring.IUserService;
  9. importcom.opensymphony.webwork.ServletActionContext;
  10. importcom.opensymphony.xwork.Action;
  11. importcom.opensymphony.xwork.ActionContext;
  12. importcom.opensymphony.xwork.ModelDriven;
  13. publicclassUserActionextendsBaseActionimplementsAction,ModelDriven{
  14. privateUsersuser=newUsers();
  15. //不用再加载springContext.xml文件,因为在web.xml中配置了,在程序中启动是就有了.
  16. UserServiceuserService=(UserService)SpringContextUtil.getBean("userService");
  17. publicStringexecute()throwsException{
  18. returnSUCCESS;
  19. }
  20. publicObjectgetModel(){
  21. returnuser;
  22. }
  23. publicStringgetAllUser(){
  24. HttpServletRequestrequest=ServletActionContext.getRequest();
  25. Listls=userService.LoadAllObject(Users.class);
  26. request.setAttribute("user",ls);
  27. this.setUrl("/yonghu.jsp");
  28. returnSUCCESS;
  29. }
  30. }

四.通过servlet 或listener设置spring的ApplicationContext,以便后来引用.
注意分别extends ContextLoaderListener和ContextLoaderServlet .然后就可用SpringContext来getBean.
覆盖原来在web.xml中配置的listener或servlet.

  1. publicclassSpringContext{
  2. privatestaticApplicationContextapplicationContext;//Spring应用上下文环境
  3. */
  4. publicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{
  5. SpringContextUtil.applicationContext=applicationContext;
  6. }
  7. /**
  8. *@returnApplicationContext
  9. */
  10. publicstaticApplicationContextgetApplicationContext(){
  11. returnapplicationContext;
  12. }
  13. */
  14. publicstaticObjectgetBean(Stringname)throwsBeansException{
  15. returnapplicationContext.getBean(name);
  16. }
  17. }
  18. publicclassSpringContextLoaderListenerextendsContextLoaderListener{//
  19. publicvoidcontextInitialized(ServletContextEventevent){
  20. super.contextInitialized(event);
  21. SpringContext.setApplicationContext(
  22. WebApplicationContextUtils.getWebApplicationContext(event.getServletContext())
  23. );
  24. }
  25. }
  26. publicclassSpringContextLoaderServletextendsContextLoaderServlet{
  27. privateContextLoadercontextLoader;
  28. publicvoidinit()throwsServletException{
  29. this.contextLoader=createContextLoader();
  30. SpringContext.setApplicationContext(this.contextLoader.initWebApplicationContext(getServletContext()));
  31. }
  32. }

自己使用:

1.如果applicationContext文件是在src的根目录下:

ApplicationContext apt= new FileSystemXmlApplicationContext("src/applicationContext.xml");

apt.getBean("ID");

可以取得

2.如果文件是在WebRoot/WEB-INF下可以用

ApplicationContext applicationContext= new FileSystemXmlApplicationContext("../applicationContext.xml");

取得

3.如果是在servlet中取可用

ServletContext application = this.getServletContext();

//获取spring上下文信息 为servlet使用
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(application);
IDicService dicService = (IDicService)wac.getBean("dicService");

分享到:
评论

相关推荐

    Java Web开发技术大全5.z05 pdf

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+...

    java web开发技术大全1 pdf

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+...

    跟我学Java_Web源代码

    《跟我学Java Web》通过对Java Web开发中所运用到的各种技术循序渐进地进行讲解,使读者能尽快掌握开发Web应用程序的方法。《跟我学Java Web》内容包括搭建Web开发环境、HTML相关技术基础知识、JavaScript相关技术...

    Java Web开发技术大全.zip pdf文件

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+...

    java web开发技术大全3 z03 pdf

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+...

    java web开发技术大全4 z04 pdf

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+...

    java web开发技术大全2 z02 pdf

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+...

    spring学习笔记

    Spring 的开发包:..............................................................................................................6 1.3.2 创建 web 工程引入相应 jar 包:........................................

    SSH笔记-静态/实例工厂方法配置bean

    SSH笔记-静态工厂方法配置bean和实例工厂方法配置bean

    java web开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+...

    ssh(structs,spring,hibernate)框架中的上传下载

     文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+...

    Java Web开发技术大全

    本书通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。本书内容包括Web客户端技术、JSP/Servlet技术、Struts 2(拦截器、类型转换、输入校验、上传和下载文件、Struts 2的各种标签...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    ssh 整合的实例-----员工表的增删查改

    ssh 框架整合的实例。 applicationContext.xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop=...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    struts1.2+spring2.0+hibernate3.1框架整合实例

    采用在web.xml中加载spring配置文件的方法降低struts和spring的耦合度,使用自定义的MyDelegatingRequestProcessor类来代替spring的DelegatingRequestProcessor类来解决spring中action的bean的重复配置问题。...

    跟我学javaweb全套ppt

    《跟我学Java Web》通过对Java Web开发中所运用到的各种技术循序渐进地进行讲解,使读者能尽快掌握开发Web应用程序的方法。《跟我学Java Web》内容包括搭建Web开发环境、HTML相关技术基础知识、JavaScript相关技术...

Global site tag (gtag.js) - Google Analytics