`
kidiaoer
  • 浏览: 818605 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Spring参考手册 IOC

阅读更多
Spring参考手册 IOC

概述

        org.springframework.beans和org.springframework.context包提供Spring框架的IOC容器的基 本功能,BeanFactory接口提供一个高级的配置机制用来管理对象,ApplicationContext接口是BeanFactory接口的子接 口,添加一些额外的功能,比如AOP特性,资源处理,事件派发和应用层特定的上下文(比如WebApplicationContext)。

        BeanFactory接口是Spring IOC容器的核心接口,主要负责实例化,配置对象和组装对象依赖关系。其实质是一个工厂类,可以维护Bean及Bean之间的依赖关系。

        容器中的Bean定义是由BeanDefinition类表示的。

        三种实例化Bean的方式: 构造函数, 静态方法, 实例方法。
依赖注入

        Spring 会在容器创建时验证Bean实例的配置,比如Bean的引用属性是否引用一个有效的Bean,但是Bean属性本身是直到Bean实例被创建时才设置的, 而除了单例对象和预实例化的对象,其他Bean是在请求时才创建的。这意味着Spring即使加载正确,也可能在请求Bean实例时抛出异常。 PropertyEditor类知道如何将属性从一种格式转换成另一种格式。

        设值方法注入可以接纳重新配置和重新注入。

        构造方法注入可以保证返回给客户的对象是完全初始化的,但是一旦初始化后不能重新配置和重新注入。
集合合并

        Spring2.0支持集合合并,子类Bean实例可以合并和重写抽象父类Bean实例的集合属性。示例如下:
xml 代码

   1. <beans>  
   2. <bean id="parent" abstract="true" class="example.ComplexObject">  
   3. <property name="adminEmails">  
   4. <props>  
   5. <prop key="administrator">administrator@somecompany.com</prop>  
   6. <prop key="support">support@somecompany.com</prop>  
   7. </props>  
   8. </property>  
   9. </bean>  
  10. <bean id="child" parent="parent">  
  11. <property name="adminEmails">  
  12. <!-- the merge is specified on the *child* collection definition -->  
  13. <props merge="true">  
  14. <prop key="sales">sales@somecompany.com</prop>  
  15. <prop key="support">support@somecompany.co.uk</prop>  
  16. </props>  
  17. </property>  
  18. </bean>  
  19. <beans>  

       
范型

        Spring2.0支持范型集合属性的映射。
Depends-on

        大部分情况下,依赖关系是通过设值方法(ref元素)定义的,还是有些情况依赖关系不是很直接,比如某个类的实例化需要执行一段静态初始化代码(如注册数据库驱动),depends-on支持逗号分隔的属性值,可以显式指定必须之前初始化的Bean实例。
懒加载

        Spring 的缺省行为是容器创建时初始化所有的单例类,可以使用lazy-init属性指定一个Bean在请求时再初始化。需要注意的是,如果一个非懒初始化的单例 Bean引用一个懒初始化的Bean,那么即便你指定了lazy-init,Spring还是会执行初始化。
可以在容器级别配置default-lazy-init属性。
自动绑定

        Spring 提供几种模式自动解决Bean实例之间的依赖关系,这是通过autowire属性实现的,目前支持五种自动绑定模式:none,byname, byType,constructor,autodetect。需要注意的是显式依赖指定总是会重写自动绑定,当前还不支持简单属性的自动绑定。

        自动绑定可以极大的减轻 XML属性配置的工作量,但是有时候可能会产生二义性。
方法注入

        如果一个单例Bean的某个方法调用时需要获取一个非单例Bean的实例,因为容器只会实例化单例Bean一次,Spring提供三种方式解决此问题。

                单例Bean实现BeanFactoryAware接口,主动查找需要的非单例Bean,这种方式的缺点是造成对Spring框架的依赖。
                查询方法注入:单例Bean实例定义一个抽象的查找方法,通过<lookup-method></lookup-method>元素进行配置,Spring会使用CGLIB库动态实现一个子类,重写查找方法。这种方式的缺点是测试包含抽象查找方法的Bean类比较困难,另外包含方法注入的 Bean实例不能被序列化。
                替换方法注入:这种方式比较高级,需要使用的时候可以查阅参考手册。
实例范围

        Spring 框架可以控制创建的Bean实例的范围,目前支持五个范围设置,其中三个应用于基于WEB的应用程序,这五个范围是:singleton, prototype,request,session,global session。Spring2.0也支持用户自定义范围。

        如 果需要将request,session,global session范围内的对象依赖注入到prototype,singleton范围的实例中,需要使用Spring框架提供的代理机制,为什么需要使用代 理机制?假定一个singleton实例依赖一个基于会话的实例,因为单例实例只会被初始化一次,如果按惯常的配置方式,将导致singleton实例总 是使用的同一个依赖实例,这显然不是我们需要的结果。使用代理机制,只需要加一行配置代码即可,示例如下:
xml 代码

   1. <bean id="userPreferences" class="com.foo.UserPreferences" scope="session">  
   2. <!-- this next element effects the proxying of the surrounding bean -->  
   3. <aop:scoped-proxy/>  
   4. </bean>  
   5. <!-- a singleton-scoped bean injected with a proxy to the above bean -->  
   6. <bean id="userService" class="com.foo.SimpleUserService">  
   7. <!-- a reference to the proxied 'userPreferences' bean -->  
   8. <property name="userPreferences" ref="userPreferences"/>  
   9. </bean>  

通过指定 merge=true,child实例将拥有parent实例的所有属性并重写parent实例的同名属性值。
标记接口

        Spring 提供几个标记接口改变容器中Bean实例的行为,Spring框架使用BeanPostProcessor回调这些标记接口的方法。
包括:
                InitializingBean……允许Bean实例在所有的属性被设置后,执行初始化动作,通常应该避免使用此接口,因为可以配置init-method方法。
                DisposableBean……允许Bean实例在容器销毁时得到回调,通常应该避免使用此接口,因为可以配置destroy-method方法。
                BeanFactoryAware…… 允许Bean实例获取当前BeanFactory的实例,通常不推荐使用此接口,因为会与Spring紧藕合,有一个可选方式是使用 ObjectFactoryCreatingFactoryBean,这个类本身实现了BeanFactoryAware接口。
                BeanNameAware……允许Bean实例获取其在BeanFactory中的id属性。

优雅退出

        基 于WEB的ApplicationContext实现在WEB应用程序关闭时,可以优雅的关闭容器。非WEB应用中如果希望应用关闭时,容器可以调用单例 Bean的销毁方法,优雅退出,必须向JVM请求一个shutdown钩子,这通过调用ApplicationContext实现的 registerShutdownHook()方法来实现,示例代码如下:
java 代码

   1. AbstractApplicationContext ctx   
   2. = new ClassPathXmlApplicationContext(new String []{"beans.xml"});   
   3. // add a shutdown hook for the above context...   
   4. ctx.registerShutdownHook();  

Bean定义继承

        可以定义一个Bean,其配置数据来自于另外一个Bean,子Bean可以重写父Bean的属性,或添加一些值,使用这种Bean定义的继承可以节省很多工作量。子Bean是通过parent属性标识的。示例配置如下:
xml 代码

   1. <bean id="inheritedTestBean" abstract="true"  
   2. class="org.springframework.beans.TestBean">  
   3. <property name="name" value="parent"/>  
   4. <property name="age" value="1"/>  
   5. bean>  
   6. <bean id="inheritsWithDifferentClass"  
   7. class="org.springframework.beans.DerivedTestBean"  
   8. parent="inheritedTestBean" init-method="initialize">  
   9. <property name="name" value="override"/>  
  10. <!-- the age property value of 1 will be inherited from parent -->  
  11. bean>  

容器扩展点

        BeanPostProcessor…… 此接口定义许多回调方法,开发人员可以提供自己的实例化,依赖注入等逻辑,容器通常在已经实例化Bean后调用这些接口方法。通常 BeanPostProcessor用来检测标记接口,检查注记(Annotation)来扩展Spring IOC容器,许多AOP框架类通过实现BeanPostProcessor来提供代理机制。
        BeanFactoryPostProcessors…… 此接口主要用来操作Bean定义,可以在容器实例化Bean之前读取和改变Bean配置元数据。PropertyResourceConfigurer和 PropertyPlaceholderConfigurer就是BeanFactoryPostProcessor接口的实现。
        FactoryBean…… 此接口用来自定义Bean实例化逻辑,相当于一个Bean工厂类,核心方法getBean返回FactoryBean创建的实例,Spring框架提供很多FactoryBean接口的实现。

ApplicationContext

        国际化:ApplicationContext 接口扩展MessageSource接口提供国际化功能,当ApplicationContext加载时会自动查找上下文中id为 messageSource的Bean实例,如果没有找到将使用框架提供的StaticMessageSource,然后将消息请求委托给 MessageSource实例。
        事件派发:ApplicationContext 通过ApplicationEvent和ApplicationListener提供事件派发功能。如果一个Bean实例实现了 ApplicationListener接口,每次ApplicationEvent事件发送到ApplicationContext时,Bean实例都 会接到通知,这实际上是访问者模式的实现。开发者可以扩展ApplicationEvent实现自己的事件类,然后在合适的时候调用 ApplicationContext的publishEvent发布事件。
        访问资源文件:ApplicationContext 实现ResourceLoader,接口可以用来加载资源文件,Bean实例可以实现ResourceLoaderAware标记接口,这样在 ApplicationContext初始化实例时,会将自己传递给Bean实例。另外Bean实例也可以提供Resource属性,由 ApplicationContext进行依赖注入。Resource属性值可以是简单的路径字符串,Spring框架提供PropertyEditor 转换这些路径字符串为Resource实例。

	  
	  
分享到:
评论

相关推荐

    Spring 参考手册 Spring速查手册 spring初学者使用

    这本《Spring参考手册》与《Spring速查手册》是学习和掌握Spring框架的重要资源,特别适合初学者入门。 一、Spring概述 Spring框架由多个模块组成,包括Core Container(核心容器)、Data Access/Integration(数据...

    spring 参考手册 pdf

    这份中文版的Spring参考手册包含了全面的Spring框架信息,旨在帮助初学者快速掌握Spring的核心概念和使用技巧。 《SpringGuide.pdf》可能是Spring框架的基础指南,它可能涵盖以下内容: 1. **Spring概述**:解释了...

    Spring2.5-中文参考手册chm

    Spring2.5中文参考手册是学习和理解Spring框架的重要资源,涵盖了上述所有核心概念和特性。通过深入阅读,开发者可以掌握如何利用Spring 2.5构建高效、灵活且易于维护的企业级应用。无论是在传统的J2EE环境中还是...

    spring中文参考手册

    Spring中文参考手册是开发者掌握和深入理解这一框架的重要资源。下面将根据提供的标题和描述,详细介绍Spring框架的关键概念、核心功能以及如何使用手册进行学习。 1. **核心模块与概念** - **依赖注入...

    Spring 中文参考手册

    这份"Spring中文参考手册"提供了全面的Spring框架组件的详细解释,旨在帮助开发者更好地理解和使用Spring。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    spring开发参考手册

    《Spring开发参考手册》是Spring框架开发者不可或缺的资源,它提供了详尽的Spring应用开发指南。这份手册以CHM(Microsoft Compiled HTML Help)格式呈现,易于查阅和使用。以下是对手册中关键知识点的概述。 1. **...

    spring2.5.2开发参考手册pdf,spring2.5.ppt,Spring2.5-中文参考手册.chm

    1. **Spring 2.5.2 开发参考手册PDF**: 这份手册详细介绍了Spring 2.5.2的各个方面,包括IoC(Inversion of Control)容器、AOP(Aspect-Oriented Programming)、数据访问、Web开发、事务管理等。其中,IoC容器是...

    Spring参考手册

    《Spring参考手册》是Spring Framework开发者的必备指南,它涵盖了Spring框架的核心概念、设计原则以及实际应用中的详细信息。Spring Framework作为Java企业级应用的重要支柱,提供了丰富的功能,包括依赖注入、面向...

    spring 2.0中文参考手册

    《Spring 2.0中文参考手册》是一本深入解析Spring框架的重要资料,它全面覆盖了Spring 2.0版本的核心特性和应用场景。Spring作为一个轻量级的Java企业级应用框架,以其模块化、松耦合的设计理念,已经成为现代Java...

    Spring 开发参考手册

    ### Spring 开发参考手册知识点详解 #### 一、Spring 概览 **Spring** 是一个开源框架,最初是由 Rod Johnson 创建的,旨在简化企业级 Java 应用程序的开发过程。Spring 提供了一种轻量级的方式来管理和配置 Java ...

    Spring框架参考手册

    ### Spring框架参考手册知识点概述 #### 一、Spring框架概览 - **1.1 开始使用Spring** - Spring框架作为一个广泛使用的轻量级Java应用框架,为开发者提供了全面的解决方案,帮助他们构建高性能、可扩展的企业级...

    spring2中文开发参考手册

    《Spring2中文开发参考手册》是一本详尽的指南,专为使用Spring框架进行软件开发的程序员设计。这本书深入探讨了Spring框架的核心概念、新特性,以及如何利用XML配置和Spring MVC来构建高效的应用程序。以下是对这些...

    spring2.0中文开发参考手册(CHM)

    通过这份中文开发参考手册,开发者可以深入了解Spring 2.0的每个角落,无论是核心的IoC容器、AOP,还是数据访问、Web应用,甚至是测试和Web服务,都能找到详细的解释和示例,从而更好地利用Spring 2.0构建高效、可...

    spring-framework 5 中文 参考手册 中文文档

    在Spring 5.0.7.RELEASE版本中,Spring Framework中文参考手册提供了对Spring核心技术的介绍,其中包含了Spring的控制反转(IoC)容器和面向方面编程(AOP)技术等内容。 IoC(控制反转)是Spring框架的核心概念之...

    Spring 参考手册及开发指南中文版

    以下是对这两个文档——"Spring2.0参考手册(中文).pdf"和"Spring开发指南中文.pdf"中关键知识点的详细解读。 1. **依赖注入(Dependency Injection, DI)**:这是Spring的核心特性之一,允许开发者将对象间的依赖...

    spring开发参考手册(中文版)

    《Spring开发参考手册(中文版)》是针对Java开发者的一份宝贵资源,它全面涵盖了Spring框架的核心概念、配置、使用方法以及最佳实践。Spring作为Java企业级应用开发的主流框架,以其模块化、轻量级和强大的依赖注入...

    Spring Framework 开发参考手册

    《Spring Framework 开发参考手册》是一本针对Java开发者的重要指南,尤其对于那些使用Spring框架进行企业级应用开发的程序员来说,它提供了全面且深入的指导。Spring是Java平台上的一个开源框架,以其依赖注入...

    jdk1.6帮助文档 和 spring参考手册.zip

    "Spring2.5-中文参考手册.chm"是Spring框架2.5版本的中文版官方文档,它详细介绍了Spring框架的各个模块和功能,包括核心容器、数据访问/集成、Web、AOP、工具和测试等。通过这份文档,开发者可以学习如何配置和使用...

    Spring Framework 开发参考手册.pdf

    《Spring Framework 开发参考手册》是一本详尽深入地探讨Spring框架的权威指南。Spring作为Java平台上的核心框架,以其模块化、松耦合和面向切面编程(AOP)的特点,深受广大开发者喜爱。本手册旨在帮助开发者全面...

Global site tag (gtag.js) - Google Analytics