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

几种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  ContextLoaderListener和ContextLoaderServlet .然后就可用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的方法.txt

    ### 几种Spring获取Bean的方法 #### 1. 通过`WebApplicationContext`获取Bean 在Web环境下,Spring提供了`WebApplicationContext`接口,它是`ApplicationContext`的子接口,专门用于Web应用。可以通过`...

    Spring在应用中获得Bean的方法

    获取Bean主要有以下几种方式: 1. **通过名称获取Bean** 使用`ApplicationContext`的`getBean(String name)`方法可以直接根据Bean的定义名称获取到对应的实例。例如: ```java ApplicationContext context = new...

    线程中获取spring 注解bean

    当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...

    第一章 Spring4 简介及获取Bean

    获取Bean主要有以下几种方式: 1. **通过Bean的ID**:使用`ApplicationContext`的`getBean()`方法,传入Bean的ID来获取实例。 2. **自动装配(Autowired)**:使用`@Autowired`注解,Spring会自动匹配类型匹配的...

    Spring在代码中获取bean的方法小结

    本文将总结几种在代码中获取Spring Bean的方法,以供学习和工作中参考。 **1. 通过`ContextLoader.getCurrentWebApplicationContext()`获取** 这种方式适用于Web应用程序,不依赖于Servlet。在服务器启动后,...

    Java获取Bean的几种方式.pdf

    通过以上方法,开发者可以灵活地在Spring应用中获取和使用Bean,实现Bean的依赖注入和控制反转,提高代码的可测试性和可维护性。理解并熟练运用这些技巧,对提升Spring应用的开发效率和质量至关重要。

    Spring在代码中获取bean的几种方式.rar

    以下将详细介绍Spring在代码中获取bean的几种主要方法: 1. **`ApplicationContext` 接口** `ApplicationContext` 是Spring中最常用的接口之一,它提供了获取Bean的多种方法。例如,`getBean(String beanName)` ...

    Spring中关于Bean的管理的课件

    10. **Aware接口**:Spring提供了一系列的Aware接口,如BeanNameAware、BeanFactoryAware和ApplicationContextAware,这些接口使得Bean可以在运行时获取自身的一些信息,例如Bean的名字、所处的Bean工厂或...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    在非Spring管理的类中,如果你想使用Spring容器中的bean,有以下几种方式: - 实现ApplicationContextAware接口,Spring会在初始化时自动注入ApplicationContext。 - 使用`@Resource`注解,与`@Autowired`类似,...

    详解Spring中bean实例化的三种方式

    本文将详细探讨Spring中bean实例化的三种主要方式:普通构造方法创建、静态工厂创建和实例工厂创建。 1. 普通构造方法创建: 这是最常见、最直观的方式,适用于大部分情况。在Spring配置文件中,我们通过`&lt;bean&gt;`...

    SpringBoot 获取spring bean方式.rar

    本篇将详细介绍Spring Boot中获取Bean的几种常见方式。 首先,让我们理解什么是Spring Bean。在Spring框架中,Bean是一个由Spring容器管理的对象,通常代表应用中的业务组件或服务。Spring会负责Bean的创建、初始化...

    Spring在代码中获取bean的几种方式详解

    "Spring在代码中获取bean的几种方式详解" Spring框架是Java应用程序中最流行的框架之一,它提供了许多功能强大且灵活的功能之一就是Bean管理机制。Bean是Spring框架的核心组件,用于管理应用程序中的业务逻辑。在...

    Spring获取webapplicationcontext,applicationcontext几种方法详解

    Spring 获取 WebApplicationContext、ApplicationContext 几种方法详解 在 Spring 框架中,获取 WebApplicationContext 和 ApplicationContext 对象是非常重要的,因为它们提供了访问 Spring 容器中的 Bean 对象的...

    获取spring容器的方法

    本文将深入探讨几种常见的获取Spring容器的方法,包括使用`ApplicationContext`、通过`ServletContext`、利用`ApplicationObjectSupport`、`WebApplicationObjectSupport`以及实现`ApplicationContextAware`接口等。...

    整合Spring与Struts的几种方法

    接下来,有三种整合Spring和Struts的方法: 1. **继承Spring的ActionSupport类**:Action直接继承Spring的`ActionSupport`,并通过`ApplicationContext`获取服务。这种方式简单,但存在几个缺点:首先,Action与...

    学习Spring的一点代码01:如何获取bean?

    Spring提供了多种方式来获取Bean,下面将详细介绍几种常用的方法。 1. **基于XML的配置** 在传统的Spring应用中,Bean定义通常存储在XML文件中。我们可以通过`ApplicationContext`接口的`getBean`方法来获取Bean。...

    Spring 应用上下文获取 Bean 的常用姿势实例总结

    @Autowired 注解是 Spring 框架提供的一种自动装配机制,可以用来获取 Bean 对象。下面是一个使用 @Autowired 注解获取 Bean 的示例代码: ```java @Service public class MyService { @Autowired private MyDao...

    Spring part 2 :Bean的生命周期

    Bean的初始化阶段可以通过以下几种方式: 1. 实现InitializingBean接口,重写afterPropertiesSet()方法。 2. 使用@PostConstruct注解标记初始化方法。 3. 在XML配置文件中使用`init-method`属性指定初始化方法。 ...

    Java Spring Controller 获取请求参数的几种方法详解

    本文将详细讲解在Spring Controller中获取请求参数的六种常见方法。 1. **直接作为方法参数** 当请求是GET类型且`Content-Type`为`application/x-www-form-urlencoded`时,可以直接在Controller方法的参数列表中...

    示例代码:spring使用【XXXPostProcessor】添加bean定义,修改bean定义、代理bean

    在Spring框架中,`XXXPostProcessor` 是一种关键的组件,它允许我们在bean实例化、初始化前后进行定制化的处理。这种处理方式对于扩展Spring的功能,实现特定的逻辑或拦截bean的行为至关重要。`BeanPostProcessor` ...

Global site tag (gtag.js) - Google Analytics