`

Java_web开发_SSH spring中取得Bean实例的方法

    博客分类:
  • ssh2
阅读更多

本文转:http://blog.csdn.net/songylwq/archive/2010/07/21/5752383.aspx

 

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

 /

import com.mas.wawacommunity.wap.service.UserManager;
 
public class BaseDispatchAction extends DispatchAction {
    /**
    * web应用上下文环境变量
    */
    protected WebApplicationContext ctx;
 
    protected UserManager userMgr;
 
    /**
    * 获得注册Bean     
    * @param beanName String 注册Bean的名称
    * @return
    */
    protected final Object getBean(String beanName) {
        return ctx.getBean(beanName);
    }
 
    protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
              javax.servlet.http.HttpServletRequest request,
              javax.servlet.http.HttpServletResponse response) {     
        return mapping.findForward("index");
    }
 
    public void setServlet(ActionServlet servlet) {
        this.servlet = servlet;
        this.ctx = WebApplicationContextUtils.getWebApplicationContext(servlet.getServletContext());
        this.userMgr = (UserManager) getBean("userManager");
    }         
}

 

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

 

public class ServiceLocator implements BeanFactoryAware {
    private static BeanFactory beanFactory = null;
 
    private static ServiceLocator servlocator = null;
 
    public void setBeanFactory(BeanFactory factory) throws BeansException {
        this.beanFactory = factory;
    }
 
    public BeanFactory getBeanFactory() {
        return beanFactory;
    }
 
   
    public static ServiceLocator getInstance() {
        if (servlocator == null)
              servlocator = (ServiceLocator) beanFactory.getBean("serviceLocator");
        return servlocator;
    }
 
    /**
    * 根据提供的bean名称得到相应的服务类     
    * @param servName bean名称     
    */
    public static Object getService(String servName) {
        return beanFactory.getBean(servName);
    }
 
    /**
    * 根据提供的bean名称得到对应于指定类型的服务类
    * @param servName bean名称
    * @param clazz 返回的bean类型,若类型不匹配,将抛出异常
    */
    public static Object getService(String servName, Class clazz) {
        return beanFactory.getBean(servName, clazz);
    }
}

   action调用: 

 

public class UserAction extends BaseAction implements Action,ModelDriven{
    
    private Users user = new Users();
    protected ServiceLocator service = ServiceLocator.getInstance();
    UserService userService = (UserService)service.getService("userService");
 
    public String execute() throws Exception {         
        return SUCCESS;
    }
 
  public Object getModel() {
        return user;
    }     
    
    public String getAllUser(){
        HttpServletRequest request = ServletActionContext.getRequest();         
        List ls=userService.LoadAllObject( Users.class );
        request.setAttribute("user",ls);     
        this.setUrl("/yonghu.jsp");
        return SUCCESS;
    }
}

 
  

自己使用:

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");

 

在servlet或者filter或者Listener中使用spring的IOC容器的方法是:

WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext()); 

由于spring是注入的对象放在ServletContext中的,所以可以直接在ServletContext取出WebApplicationContext 对象:

WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

事实上WebApplicationContextUtils.getWebApplicationContext方法就是使用上面的代码实现的,建议使用上面上面的静态方法 


注意:在使用webApplicationContext.getBean("ServiceName")的时候,前面强制转化要使用接口,如果使用实现类会报类型转换错误。如:
LUserService userService = (LUserService) webApplicationContext.getBean("userService");  

分享到:
评论

相关推荐

    SSH.rar_SSH-RBAC_java web_spring_ssh_ssh项目

    SSH是Java Web开发中的一个经典框架组合,全称为Struts2、Spring和Hibernate。这个SSH.rar文件中的SSH-RBAC项目是一个基于这三个框架的实战应用,主要目标是实现基于角色的访问控制(Role-Based Access Control,...

    SSH-JPA.ZIP_SSH JPA DAO_java web ssh jpa_jpa_ssh_ssh jpa

    SSH-JPA是一个基于Java Web开发的技术栈,主要包含Spring、Struts2和Hibernate以及Java Persistence API(JPA)这四个核心组件。这个压缩包文件"SSH-JPA.ZIP"提供的内容是一个SSH-JPA的实例,对于初学者或者开发者来...

    SSH.rar_SSH实例_SSH框架开发_ssh框架源码_ssh项目实例

    SSH框架是Java开发中常用的三大框架集成,包括Struts2、Spring和Hibernate。这个"SSH.rar"压缩包提供了一个实际的SSH框架开发实例,对于学习和理解SSH框架的整合及应用有着极大的帮助。 首先,Struts2是MVC(Model-...

    bbs.rar_SSH_bbs_bbs ssh_java BBS_java bbs ssh_ssh bbs

    在IT行业中,SSH框架是Java Web开发中非常重要的一个组合,它由Spring、Struts和Hibernate三个开源框架组成。这个名为“bbs.rar”的压缩包文件似乎包含了一个基于SSH(Spring、Struts、Hibernate)框架构建的BBS...

    ssh_2.rar_SSH MyEclipse_myeclipse ssh_ssh_ssh 源码

    SSH(Struts、Spring、Hibernate)是Java开发中常见的三个框架的组合,广泛应用于企业级应用的开发。这个名为"ssh_2.rar"的压缩包文件包含了一个基于SSH的项目源码,适合在MyEclipse集成开发环境中运行和学习。 **...

    ssh.rar_java ssh 详解_ssh

    SSH(Struts+Spring+Hibernate)是Java Web开发中一种常见的技术栈,它结合了三个强大的开源框架:Struts作为表现层,Spring作为业务层控制和依赖注入容器,Hibernate作为持久层 ORM 框架。这个压缩包"ssh.rar"显然...

    跟我学Java_Web源代码

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

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

    这些方法为Spring容器提供了更灵活的Bean实例化策略,让我们深入了解一下这两种方法。 首先,静态工厂方法配置Bean是通过调用类中静态工厂方法来创建对象的方式。这种方式下,Spring并不直接实例化目标类,而是调用...

    基于ssh的web理财管理系统.rar_java_javaweb 项目_jsp_ssh

    SSH是三个Java开发框架的缩写,分别是Spring、Struts和Hibernate,它们共同构建了一个强大的Web应用程序开发框架。Spring提供了依赖注入(DI)和面向切面编程(AOP)功能,用于管理应用程序的复杂性;Struts是MVC...

    SSH.rar_spring_spring hibernate_ssh_struts

    在IT行业中,SSH(Spring、Hibernate、Struts)是一个经典的Java Web开发框架组合,用于构建高效、可维护的Web应用程序。SSH是三个开源框架的首字母缩写,它们分别是Spring框架、Hibernate持久化框架和Struts MVC...

    java web开发技术大全1 pdf

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

    SSH全注解实例详解,hibernate,struts,spring

    SSH是Java Web开发中的一个经典框架组合,包括Struts、Hibernate和Spring三个核心组件。这个框架结合了MVC设计模式、对象关系映射以及依赖注入等技术,为开发者提供了高效且灵活的开发环境。 **Struts** 是一个开源...

    Java Web开发技术大全5.z05 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:SSH-Spring整合struts2&hibernate;框架

    在IT行业中,SSH(Spring、Struts2、Hibernate)是一个常见的企业级Web应用程序开发框架组合。这个框架集合了Spring的全面控制反转(IoC)和面向切面编程(AOP)、Struts2的MVC设计模式以及Hibernate的对象关系映射...

    java web开发技术大全4 z04 pdf

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

    java_webservice_JAX-RS.zip_cxf_jax_jax-rs_spring cxf

    SSH(Spring、Struts、Hibernate)是Java开发中的经典MVC(Model-View-Controller)框架组合。Spring提供了依赖注入和面向切面编程,Struts处理用户交互,而Hibernate则负责数据库操作。在SSH架构中添加Web服务,...

    SSH笔记-bean的作用域

    当我们谈论"SSH笔记-bean的作用域"时,这里SSH指的是Spring、Struts和Hibernate这三大Java Web开发框架的缩写,但具体讨论的是Spring框架中的内容。 在Spring 4中,Bean的作用域有以下几种: 1. **单例(Singleton...

    JAVA框架SSH的一个实例

    SSH(Struts2 + Spring + Hibernate)是Java Web开发中常见的三大开源框架集成,它们分别负责MVC模式中的展示层、业务层和数据持久化层。本实例将带你深入理解SSH框架的集成与应用,特别适合初学者进行学习。 ### 1...

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

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

Global site tag (gtag.js) - Google Analytics