• Spring-程序中获取注册bean的方式


    获得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="com.am.oa.commons.service.ServiceLocator" 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; 
    } 
    } 




    三:方法三实现ApplicationContextAware 
    一定要在spring.xml中加上: 

    <bean id="SpringContextUtil " class="com.am.oa.commons.service.SpringContextUtil " singleton="true" /> 


    当对SpringContextUtil 实例时就自动设置applicationContext,以便后来可直接用applicationContext 

    public class SpringContextUtil implements ApplicationContextAware { 
    private static ApplicationContext applicationContext; //Spring应用上下文环境 
    
    /** 
    * 实现ApplicationContextAware接口的回调方法,设置上下文环境 
    * @param applicationContext 
    * @throws BeansException 
    */ 
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
      SpringContextUtil.applicationContext = applicationContext; 
    } 
    
    /** 
    * @return ApplicationContext 
    */ 
    public static ApplicationContext getApplicationContext() { 
    return applicationContext; 
    } 
    
    /** 
    * 获取对象 
    * @param name 
    * @return Object 一个以所给名字注册的bean的实例 
    * @throws BeansException 
    */ 
    public static Object getBean(String name) throws BeansException { 
    return applicationContext.getBean(name); 
    } 
    
    /** 
    * 获取类型为requiredType的对象 
    * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException) 
    * @param name bean注册名 
    * @param requiredType 返回对象类型 
    * @return Object 返回requiredType类型对象 
    * @throws BeansException 
    */ 
    public static Object getBean(String name, Class requiredType) throws BeansException { 
    return applicationContext.getBean(name, requiredType); 
    } 
    
    /** 
    * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true 
    * @param name 
    * @return boolean 
    */ 
    public static boolean containsBean(String name) { 
    return applicationContext.containsBean(name); 
    } 
    
    /** 
    * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 
    * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) 
    * @param name 
    * @return boolean 
    * @throws NoSuchBeanDefinitionException 
    */ 
    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { 
    return applicationContext.isSingleton(name); 
    } 
    
    /** 
    * @param name 
    * @return Class 注册对象的类型 
    * @throws NoSuchBeanDefinitionException 
    */ 
    public static Class getType(String name) throws NoSuchBeanDefinitionException { 
    return applicationContext.getType(name); 
    } 
    
    /** 
    * 如果给定的bean名字在bean定义中有别名,则返回这些别名 
    * @param name 
    * @return 
    * @throws NoSuchBeanDefinitionException 
    */ 
    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { 
    return applicationContext.getAliases(name); 
    } 
    } 




    action调用: 

    package com.anymusic.oa.webwork; 
    
    import java.util.List; 
    import java.util.Map; 
    
    import javax.servlet.http.HttpServletRequest; 
    
    import com.anymusic.oa.commons.service.ServiceLocator; 
    import com.anymusic.oa.hibernate.pojo.Role; 
    import com.anymusic.oa.hibernate.pojo.Users; 
    import com.anymusic.oa.spring.IUserService; 
    import com.opensymphony.webwork.ServletActionContext; 
    import com.opensymphony.xwork.Action; 
    import com.opensymphony.xwork.ActionContext; 
    import com.opensymphony.xwork.ModelDriven; 
    
    public class UserAction extends BaseAction implements Action,ModelDriven{ 
    
    private Users user = new Users(); 
    //不用再加载springContext.xml文件,因为在web.xml中配置了,在程序中启动是就有了. 
    UserService userService = (UserService) SpringContextUtil.getBean("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; 
    } 
    } 




    四.通过servlet 或listener设置spring的ApplicationContext,以便后来引用. 
    注意分别extends ContextLoaderListenerContextLoaderServlet .

    然后就可用SpringContext来getBean. 覆盖原来在web.xml中配置的listener或servlet. 

    public class SpringContext { 
    private static ApplicationContext applicationContext; //Spring应用上下文环境 
    
    */ 
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
    SpringContextUtil.applicationContext = applicationContext; 
    } 
    
    /** 
    * @return ApplicationContext 
    */ 
    public static ApplicationContext getApplicationContext() { 
    return applicationContext; 
    } 
    
    */ 
    public static Object getBean(String name) throws BeansException { 
    return applicationContext.getBean(name); 
    } 
    } 
    public class SpringContextLoaderListener extends ContextLoaderListener{ // 
    public void contextInitialized(ServletContextEvent event) { 
    super.contextInitialized(event); 
    SpringContext.setApplicationContext( 
    WebApplicationContextUtils.getWebApplicationContext(event.getServletContext())
    ); 
    } 
    } 
    public class SpringContextLoaderServlet extends ContextLoaderServlet { 
    private ContextLoader contextLoader; 
    public void init() throws ServletException { 
    this.contextLoader = createContextLoader(); 
    SpringContext.setApplicationContext(this.contextLoader.initWebApplicationContext(getServletContext()));
    } 
    }
  • 相关阅读:
    使用Maven快速创建一个SpringMVC工程步骤
    签到
    yaml简介
    APP定位元素之UiSelector
    js中var、let、const区别
    用Jquery去写树结构
    正则相关的知识分享
    python常见问题
    Vue.js 的一些小技巧
    关于jsp删除成功,添加成功等之后 页面自动跳转的js写法
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4549061.html
Copyright © 2020-2023  润新知