`
kobe学java
  • 浏览: 251560 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Spring在web应用中获得Bean的方法

 
阅读更多

 

一:使用ApplicationContext获得Bean

首先新建一个类,该类必须实现ApplicationContextAware接口,改接口有一个方法,public void setApplicationContext(ApplicationContext applicationContext)throws BeansException ,

也就是说框架会自动调用这个方法返回一个ApplicationContext对象。具体类如下:

 

Java代码   收藏代码
  1. public class SpringContextUtils implements ApplicationContextAware{//Spring的工具类,用来获得配置文件中的bean  
  2.       
  3.     private static ApplicationContext applicationContext = null;  
  4.   
  5.     /*** 
  6.      * 当继承了ApplicationContextAware类之后,那么程序在调用 
  7.      * getBean(String)的时候会自动调用该方法,不用自己操作 
  8.      */  
  9.     public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {  
  10.         SpringContextUtils.applicationContext = applicationContext;  
  11.     }  
  12.     public static ApplicationContext getApplicationContext() {  
  13.         return applicationContext;  
  14.     }  
  15.     /*** 
  16.      * 根据一个bean的id获取配置文件中相应的bean 
  17.      * @param name 
  18.      * @return 
  19.      * @throws BeansException 
  20.      */  
  21.     public static Object getBean(String name) throws BeansException {  
  22.         return applicationContext.getBean(name);  
  23.     }  
  24.     /*** 
  25.      * 类似于getBean(String name)只是在参数中提供了需要返回到的类型。 
  26.      * @param name 
  27.      * @param requiredType 
  28.      * @return 
  29.      * @throws BeansException 
  30.      */  
  31.     public static Object getBean(String name, Class requiredType) throws BeansException {  
  32.         return applicationContext.getBean(name, requiredType);  
  33.     }  
  34.            
  35.           /** 
  36.           * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true  
  37.           * @param name 
  38.           * @return boolean 
  39.           */  
  40.     public static boolean containsBean(String name) {  
  41.          return applicationContext.containsBean(name);  
  42.     }  
  43.            
  44.           /** 
  45.           * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 
  46.           * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)    
  47.           * @param name 
  48.           * @return boolean 
  49.           * @throws NoSuchBeanDefinitionException 
  50.           */  
  51.     public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {  
  52.           return applicationContext.isSingleton(name);  
  53.     }  
  54.            
  55.           /** 
  56.           * @param name 
  57.           * @return Class 注册对象的类型 
  58.           * @throws NoSuchBeanDefinitionException 
  59.           */  
  60.     public static Class getType(String name) throws NoSuchBeanDefinitionException {  
  61.          return applicationContext.getType(name);  
  62.     }  
  63.            
  64.           /** 
  65.           * 如果给定的bean名字在bean定义中有别名,则返回这些别名    
  66.           * @param name 
  67.           * @return 
  68.           * @throws NoSuchBeanDefinitionException 
  69.           */  
  70.     public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {  
  71.          return applicationContext.getAliases(name);  
  72.     }  
  73. }  

 

该类中有一个getBean(String name)方法,该方法用applicationContext去获得Bean实例,而applicationContext

是由系统启动时自动设置的。注意,在applicationContext.xml配置文件中需要把该类加上。<bean id="springUtils" class="en.estar.utils.SpringContextUtils"/>

 

二:通过BeanFactory接口获得Bean

      也是新建一个类,不过该类需要实现BeanFactoryAware接口,该接口有一个方法public void setBeanFactory(BeanFactory beanFactory) throws BeansException;该方法是为了设置BeanFactory对象,系统会在启动的时候自动设置BeanFactory。具体代码如下:

 

 

Java代码   收藏代码
  1. public class SpringBeanFactoryUtils implements BeanFactoryAware {  
  2.   
  3.     private static BeanFactory beanFactory = null;  
  4.     private static SpringBeanFactoryUtils factoryUtils = null;  
  5.       
  6.     public void setBeanFactory(BeanFactory beanFactory) throws BeansException {  
  7.         SpringBeanFactoryUtils.beanFactory = beanFactory;  
  8.     }  
  9.     public static BeanFactory getBeanFactory() {  
  10.         return beanFactory;  
  11.     }  
  12.     public static SpringBeanFactoryUtils getInstance(){  
  13.         if(factoryUtils==null){  
  14.             //factoryUtils = (SpringBeanFactoryUtils)beanFactory.getBean("springBeanFactoryUtils");  
  15.             factoryUtils = new SpringBeanFactoryUtils();  
  16.         }  
  17.         return factoryUtils;  
  18.     }  
  19.     public static Object getBean(String name){  
  20.         return beanFactory.getBean(name);  
  21.     }  
  22. }  

 

 

 

 

 

 

 

不过应该注意的是,改类中有一个getInstance方法,由于该代码是网上摘抄的,他提供了这么一个方法,目的是利用单例模式获得该类的一个实例,但由于getBean(String name)方法是静态的,所以用不用单例都无关紧要,经过测试,两种方法都行的通。另外一点就是必须把该类添加到applicationContext.xml的配置文件中<bean id="springBeanFactoryUtils" class="en.estar.utils.SpringBeanFactoryUtils"/>

 

三:在servlet中可以用WebApplicationContext类去获取Bean,具体做法是:

Java代码   收藏代码
  1. WebApplicationContext webcontext = (WebApplicationContext)context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);  

 

 其中context是servlet的上下文,在servlet中可以通过this.getServletContext()或者request.getSession().getServletContext();获得servletContext。但是一点,spring的配置文件必须在WEB-INF下。WebApplicationContext 有一个方法getBean(String name);其实WebApplicationContext 就是ApplicationContext的另一种形式而已。

       另外,在普通的java类中,即不是在servlet中可以用ContextLoader获得。ContextLoader是org.springframework.web.context包当中的一个类。

Java代码   收藏代码
  1. private static WebApplicationContext webApplication = ContextLoader.getCurrentWebApplicationContext();  

 

 用这种方法就能获取一个WebApplicationContext 的对象。

 

最后经过测试,在重复100000次的基础上,第一二中方法只用了16毫秒,而第三种方法消耗了62毫秒,所以推荐使用第一二种方法。

分享到:
评论

相关推荐

    Spring框架bean工具,在多线程环境下手动创建bean

    一个Spring框架的bean工具,可以在多线程环境下手动创建bean。使用时请注意在spring配置文件下加入&lt;bean id="springBeanUtils" class="com.hujin.common.util.SpringBeanUtils"/&gt;

    spring介绍及应用

    Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...

    Spring集成AXIS2的Web_service配置方法

    Spring 集成 AXIS2 的 Web service 配置方法 Spring 是一个流行的 Java 应用程序...总结来说,Spring 集成 AXIS2 的 Web 服务配置方法可以提高开发效率和系统可维护性,该配置方法可以应用于企业级应用程序的开发中。

    实战Acegi_使用Acegi作为基于Spring框架的WEB应用的安全框架

    它既能应用于WEB应用也能应用于非WEB应用。在 本文的示例程序 里,我将演示如何将Acegi应用于WEB应用程序。通过这个例子详细介绍如何配置Acegi的各个组件,同时介绍如何扩展Acegi 使其能够从数据库中读取配置信息

    Spring+3.x企业应用开发实战光盘源码(全)

     第2章:通过一个简单的例子展现开发Spring Web应用的整体过程,通过这个实例,读者可以快速跨入Spring Web应用的世界。  第3章:讲解Spring IoC容器的知识,通过具体的实例详细地讲解IoC概念。同时,对Spring框架...

    Spring开发指南

    Web 应用中模板技术与 JSP 技术的对比 输入验证与数据绑定 异常处理 国际化支持 WebWork2 & Spring Quick Start WebWork 高级特性 Action 驱动模式 XWork 拦截器体系 输入校验 国际化支持 Webwork2...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    它既能应用于WEB应用也能应用于非WEB应用。在 本文的示例程序 里,我将演示如何将Acegi应用于WEB应用程序。通过这个例子详细介绍如何配置Acegi的各个组件,同时介绍如何扩展Acegi 使其能够从数据库中读取配置信息。

    JSP 中Spring Bean 的作用域详解

    JSP 中Spring Bean 的作用域详解 Bean元素有一个scope属性,用于定义Bean的作用域,该属性有如下五个值: 1&gt;singleton: 单例模式,在整个spring IOC容器中,单例模式作用域...这种作用域只有在Web应用中使用Spring容

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用Acegi实施应用系统安全 第...

    Spring.3.x企业应用开发实战(完整版).part2

    13.6.4 Web应用程序中调度器的启动和关闭问题 13.7 小结 第14章 使用OXM进行对象XML映射 14.1 认识XML解析技术 14.1.1 什么是XML 14.1.2 XML的处理技术 14.2 XML处理利器:XStream 14.2.1 XStream概述 14.2.2 快速...

    精通Spring 4.x 企业应用开发实战

    这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升应用开发的优雅性。本书是在《精通Spring 3.x――企业应用开发详解》的基础上,历时一年的重大调整改版而成的,延续...

    spring-5.2.6.7z

    Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...

    spring jar 包详解

    spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类...

    Spring中ApplicationContext加载机制

    配置完成之后,即可通过 WebApplicationContextUtils.getWebApplicationContext 方法在 Web 应用中获取 ApplicationContext 引用。例如: ```java ApplicationContext ctx = WebApplicationContextUtils.get...

    Spring攻略PDF版

     3.1 在Spring IoC容器里配置Bean   3.1.1 问题描述   3.1.2 解决方案   3.1.3 实现方法   3.2 实例化Spring IoC容器   3.2.1 问题描述   3.2.2 解决方案   3.2.3 实现方法   3.3...

    SpringSecurity.zip

    它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...

    Spring框架+Spring工作原理+AOP面向切面编程+JDK代理+Cglib代理

    Spring框架是一个开放源代码的J2EE应用程序框架,是对bean的生命周期进行管理的轻量级容器。 适用:中高级开发 Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork等众多Web框架组合使用,并且可以与Swing...

    spring的bean作用域

    讲解了spring的6种作用域:singleton(单例)、non-singleton(也称 prototype),Spring2.0以后,增加了session、request、global session三种专用于Web应用程序上下文的Bean

    精通Spring 4.x 企业应用开发实战 高清完整版PDF书及随书源码

    这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升应用开发的优雅性。本书是在《精通Spring 3.x――企业应用开发详解》的基础上,历时一年的重大调整改版而成的,延续...

Global site tag (gtag.js) - Google Analytics