码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-03 15:22:19      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

获得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()));
} 
}

 

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

标签:

原文地址:http://www.cnblogs.com/hwaggLee/p/4549061.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!