spring 几种获得bean的方法

spring 几种获得bean的方法

几种获得spring里注册Bean的方法

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

 

importcom.mas.wawacommunity.wap.service.UserManager;

publicclassBaseDispatchActionextendsDispatchAction{

/**

*web应用上下文环境变量

*/

protectedWebApplicationContextctx;

protectedUserManageruserMgr;

/**

*获得注册Bean

*@parambeanNameString注册Bean的名称

*@return

*/

protectedfinalObjectgetBean(StringbeanName){

returnctx.getBean(beanName);

}

protectedActionForwardunspecified(ActionMappingmapping,ActionFormform,

javax.servlet.http.HttpServletRequestrequest,

javax.servlet.http.HttpServletResponseresponse){

returnmapping.findForward("index");

}

publicvoidsetServlet(ActionServletservlet){

this.servlet=servlet;

this.ctx=WebApplicationContextUtils.getWebApplicationContext(servlet.getServletContext());

this.userMgr=(UserManager)getBean("userManager");

}

}

二:方法二实现BeanFactoryAware

一定要在spring.xml中加上:

<beanid="serviceLocator"class="com.am.oa.commons.service.ServiceLocator"singleton="true"/>

当对serviceLocator实例时就自动设置BeanFactory,以便后来可直接用beanFactory

publicclassServiceLocatorimplementsBeanFactoryAware{

privatestaticBeanFactorybeanFactory=null;

privatestaticServiceLocatorservlocator=null;

publicvoidsetBeanFactory(BeanFactoryfactory)throwsBeansException{

this.beanFactory=factory;

}

publicBeanFactorygetBeanFactory(){

returnbeanFactory;

}

publicstaticServiceLocatorgetInstance(){

if(servlocator==null)

servlocator=(ServiceLocator)beanFactory.getBean("serviceLocator");

returnservlocator;

}

/**

*根据提供的bean名称得到相应的服务类

*@paramservNamebean名称

*/

publicstaticObjectgetService(StringservName){

returnbeanFactory.getBean(servName);

}

/**

*根据提供的bean名称得到对应于指定类型的服务类

*@paramservNamebean名称

*@paramclazz返回的bean类型,若类型不匹配,将抛出异常

*/

publicstaticObjectgetService(StringservName,Classclazz){

returnbeanFactory.getBean(servName,clazz);

}

}

action调用:

 

publicclassUserActionextendsBaseActionimplementsAction,ModelDriven{

privateUsersuser=newUsers();

protectedServiceLocatorservice=ServiceLocator.getInstance();

UserServiceuserService=(UserService)service.getService("userService");

publicStringexecute()throwsException{

returnSUCCESS;

}

publicObjectgetModel(){

returnuser;

}

publicStringgetAllUser(){

HttpServletRequestrequest=ServletActionContext.getRequest();

Listls=userService.LoadAllObject(Users.class);

request.setAttribute("user",ls);

this.setUrl("/yonghu.jsp");

returnSUCCESS;

}

}

三:方法三实现ApplicationContextAware

一定要在spring.xml中加上:

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

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

publicclassSpringContextUtilimplementsApplicationContextAware{

privatestaticApplicationContextapplicationContext;//Spring应用上下文环境

/**

*实现ApplicationContextAware接口的回调方法,设置上下文环境

*@paramapplicationContext

*@throwsBeansException

*/

publicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{

SpringContextUtil.applicationContext=applicationContext;

}

/**

*@returnApplicationContext

*/

publicstaticApplicationContextgetApplicationContext(){

returnapplicationContext;

}

/**

*获取对象

*@paramname

*@returnObject一个以所给名字注册的bean的实例

*@throwsBeansException

*/

publicstaticObjectgetBean(Stringname)throwsBeansException{

returnapplicationContext.getBean(name);

}

/**

*获取类型为requiredType的对象

*如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)

*@paramnamebean注册名

*@paramrequiredType返回对象类型

*@returnObject返回requiredType类型对象

*@throwsBeansException

*/

publicstaticObjectgetBean(Stringname,ClassrequiredType)throwsBeansException{

returnapplicationContext.getBean(name,requiredType);

}

/**

*如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true

*@paramname

*@returnboolean

*/

publicstaticbooleancontainsBean(Stringname){

returnapplicationContext.containsBean(name);

}

/**

*判断以给定名字注册的bean定义是一个singleton还是一个prototype。

*如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)

*@paramname

*@returnboolean

*@throwsNoSuchBeanDefinitionException

*/

publicstaticbooleanisSingleton(Stringname)throwsNoSuchBeanDefinitionException{

returnapplicationContext.isSingleton(name);

}

/**

*@paramname

*@returnClass注册对象的类型

*@throwsNoSuchBeanDefinitionException

*/

publicstaticClassgetType(Stringname)throwsNoSuchBeanDefinitionException{

returnapplicationContext.getType(name);

}

/**

*如果给定的bean名字在bean定义中有别名,则返回这些别名

*@paramname

*@return

*@throwsNoSuchBeanDefinitionException

*/

publicstaticString[]getAliases(Stringname)throwsNoSuchBeanDefinitionException{

returnapplicationContext.getAliases(name);

}

}

action调用:

packagecom.anymusic.oa.webwork;

importjava.util.List;

importjava.util.Map;

importjavax.servlet.http.HttpServletRequest;

importcom.anymusic.oa.commons.service.ServiceLocator;

importcom.anymusic.oa.hibernate.pojo.Role;

importcom.anymusic.oa.hibernate.pojo.Users;

importcom.anymusic.oa.spring.IUserService;

importcom.opensymphony.webwork.ServletActionContext;

importcom.opensymphony.xwork.Action;

importcom.opensymphony.xwork.ActionContext;

importcom.opensymphony.xwork.ModelDriven;

publicclassUserActionextendsBaseActionimplementsAction,ModelDriven{

privateUsersuser=newUsers();

//不用再加载springContext.xml文件,因为在web.xml中配置了,在程序中启动是就有了.

UserServiceuserService=(UserService)SpringContextUtil.getBean("userService");

publicStringexecute()throwsException{

returnSUCCESS;

}

publicObjectgetModel(){

returnuser;

}

publicStringgetAllUser(){

HttpServletRequestrequest=ServletActionContext.getRequest();

Listls=userService.LoadAllObject(Users.class);

request.setAttribute("user",ls);

this.setUrl("/yonghu.jsp");

returnSUCCESS;

}

}

四.通过servlet 或listener设置spring的ApplicationContext,以便后来引用.

注意分别extendsContextLoaderListener和ContextLoaderServlet.然后就可用SpringContext来getBean.

覆盖原来在web.xml中配置的listener或servlet.

public class SpringContext  {  private static ApplicationContext applicationContext;     //Spring应用上下文环境

  */

publicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{

SpringContextUtil.applicationContext=applicationContext;

}

/**

*@returnApplicationContext

*/

publicstaticApplicationContextgetApplicationContext(){

returnapplicationContext;

  }

  */

publicstaticObjectgetBean(Stringname)throwsBeansException{

returnapplicationContext.getBean(name);

  }

}

public class SpringContextLoaderListener extends ContextLoaderListener{  //

publicvoidcontextInitialized(ServletContextEventevent){

super.contextInitialized(event);

SpringContext.setApplicationContext(

WebApplicationContextUtils.getWebApplicationContext(event.getServletContext())

);

}

}

public class SpringContextLoaderServlet extends ContextLoaderServlet {

privateContextLoadercontextLoader;

publicvoidinit()throwsServletException{

this.contextLoader=createContextLoader();

SpringContext.setApplicationContext(this.contextLoader.initWebApplicationContext(getServletContext()));

}

}

相关推荐