- 浏览: 450865 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
鱼里的yeol:
正在学习EJB 感觉有些吃力
Ejb3学习之二----Ejb3的Ejb Bean类型介绍 -
phoenix5870:
默认就是singleton的。
Spring中的Singleton模式和Java中的Singleton模式 -
jhys7s8jd:
pdf打印机下载 无水印http://www.onlinedo ...
PDFCreate工具的使用 -
wang371134086:
:e vil:
浅谈Struts2中的拦截器实现责任链模式 -
liu765023051:
亲,local与remote有什么区别呢
EJB学习之三---Local和Remote接口
关键字
BeanFactory
ApplicationContext
创建Bean的三种方法
Bean的作用域
Bean的生命周期
Bean的XML元数据配置
自动扫描管理Bean
对于Spring框架开发而言,BeanFactory和ApplicationContext无疑是最基础的两个类。那么这篇文章就介绍下。
一 BeanFactory
接口BeanFactory(org.springframework.beans.BeanFactory),其职责是:处理Bean的初始化,定位,配置应用程序中的对象以及建立这些对象的依赖。Bean对象的依赖是通过元数据来描述。通过BeanFactoryAware类实现。比较常用的子接口为XMLBeanFactory。
对于单个文件的读取方法有如下两种:
1)
2)
当需要从多个文件中加载一个BeanFactory实例时候,可以像如下使用:
而Bean Factory通过Bean definition reader从多个文件中读取Bean定义,这样的话,我们可以这么处理,即组成基于XML配置元数据可以做如下配置:
在BeanFactory中,与之关联最重要的类是:BeanWrapper。
二 ApplicationContext
接口ApplicationContext来自于org.springframework.context.ApplicationContext,继承BeanFactory,除了支持BeanFactory的功能外,还能支持企业应用的其它功能,如:事务管理,国际化支持,以及AOP集成等等。通过类ApplicationContextAware类实现。比较常用的子接口为:AbstactApplicationContext。
例如:
ApplicationContext ctx = new ClassPathXmlApplicationContext(“application.xml”);
对于多个XML配置文件来读取一个ApplicationContext实例时,可以这样使用:
1) ApplicationContext ctx= new ClassPathXmlApplicationContext(new String[]{“beans.xml”,”application.xml”});
2) ApplicationContext context = new FileSystemXmlApplicationContext("c:/foo.xml");---不推荐使用
3) XmlApplicationContext:用来读取包含一个WebAppliction中的XML文件。
ApplictionContext的关闭,通过调用AbstractApplicationContext.close()来执行。而BeanFactory的关闭,可以通过destroy-method=”method”来实现。
三 创建bean的三种方法
1. 类构造器
如:<bean id=”personService” class=”com.spring.service.impl.PersonServiceBean”/>
下面给出一个Sample:
1) beans.xml配置
2) PersonService.java/PersonServiceBean.java
PersonService.java:
3) 测试类:SpringTest.java
Console执行:
当然,在这个方法被调用之前,构造函数和init()方法都已经被调用。
2. 静态工厂(Static Factory)
如: <bean id=”personService” class=”com.spring.service.impl.PersonServiceBeanFactory” factory-method=”createPersonServiceBean”/>
1) beans.xml:
2) PersonService.java和PersonServiceBean.java同上
3) PersonServiceBeanFactory.java
4) SpringTest.java:同上
3. 实例工厂
如: <bean id=”personService” class=”com.spring.service.impl.PersonServiceBeanFactory” factory-bean=”PersonServiceBeanFacotory” factory-method=”createPersonServiceBean”/>
1) beans.xml:
2) PersonService.java和PersonServiceBean.java同上
3) PersonServiceBeanFactory.java
4) SpringTest.java:同上
四 Bean的作用域
Bean的作用域在Spring中主要用到两个:Singleton(默认)和Prototype。
1. Singleton:
对于每个Spring Ioc容器而言,每个bean定义只有一个对象实例,这同Java对象中的Singleton不一样。在Spring中,singleton是基于Spring Ioc容器这个Level,而java中是针对与JVM这个Level。默认情况下,系统会在容器启动的时候加载,即在容器加载完成后去调用该Bean的默认构造函数。当然,可以在bean.xml中配置延迟加载(Lazy-init=”true”),或者是要求所有的bean都使用延迟加载(default-lazy-init=”true”).
2. Prototype:
对于Prototype而言,每次都会创建一个新的对象实例。而Bean的实例化是在调用getBean方法时。
五 Bean的生命周期
Bean是由Spring容器初始化,装配和管理的对象。Bean的生命周期主要是:
1) Bean实例化
Bean的默认构造函数。
2) Bean的初始化
Init()方法中可以进行初始化。
3) Bean的使用
getBean()方法可以获取当前的Bean,从而做相对应的业务操作。
4) Bean的销毁
destroy()方法执行bean的销毁。
六 Bean的XML元数据配置
对于所有的Bean配置,我们都是在XML中完成。所有的Bean属性配置可以参考http://www.springframework.org/schema/beans/spring-beans-2.5.xsd。
详细内容请看下面的一个Sample:
1. Scope:
这里同Web应用中的Scope一样,但是在Spring中,Singleton和Prototype是常用的Value。
2. Init-method:
就是初始化Bean时调用的方法
3. Destroy-method:
就是Bean销毁时候指定调用的方法
4. Autowire
Autowire:对应有五个Value,分别如下:
可以设置bean使自动装配失效:
采用xml格式配置bean时,将<bean/>元素的autowire-candidate属性设置为false,这样容器在查找自动装配对象时,将不考虑该bean,即它不会被考虑作为其它bean自动装配的候选者,但是该bean本身还是可以使用自动装配来注入其它bean的.
不过,在日常的开发中,一般都是进行手工装配,很少用自动装配,因为手工装配易于开发管理。
5. Dependency-check
Dependency-check属性是同autowire属性一同使用,也就是说,只有在使用自动装载的时候,才会发挥作用。主要有四个Value:
如:
是不能被子Bean所继承。
6. Abstract
Value值对应有true和false.一个bean组件没有指定实现类,而是通过设置abstract="true"属性来组织spring 容器实例化组件.abstract="true",表明这个bean只能作为其他bean的父bean使用,不能直接被实例化。
7. Factory-bean
只有使用实例工厂实例化bean的场合。
8. Factory-method
在使用非构造器方式实例化bean的场合。
9. 关于Collection的实例化
七 自动扫描管理Bean
自动扫描管理Bean,主要分为以下步骤:
1. XML配置
<context:component-scan base-package=”com.spring”/>
告诉Spring容器,在com.spring包包含子包下所有的Bean都委托给Spring容器扫描管理。
2. Bean的注解
对于Spring引入的注解有四种:@Service,@Controller,@Repository,@Component。
对于@Service,用于标注业务层组件。
对于@Controller,用于标注控制层组件。
对于@Repository, 用于标注数据访问层组件(即Dao层);
对于@Component,用于标注所有的组件,通常用于一个不宜归于上述三种组件类型的Bean组件。
更多详细的设置,可以参考:http://www.springframework.org/schema/context/spring-context-2.5.xsd。
BeanFactory
ApplicationContext
创建Bean的三种方法
Bean的作用域
Bean的生命周期
Bean的XML元数据配置
自动扫描管理Bean
对于Spring框架开发而言,BeanFactory和ApplicationContext无疑是最基础的两个类。那么这篇文章就介绍下。
一 BeanFactory
接口BeanFactory(org.springframework.beans.BeanFactory),其职责是:处理Bean的初始化,定位,配置应用程序中的对象以及建立这些对象的依赖。Bean对象的依赖是通过元数据来描述。通过BeanFactoryAware类实现。比较常用的子接口为XMLBeanFactory。
对于单个文件的读取方法有如下两种:
1)
Resource resource = new FileSystemResource(“beans.xml”); BeanFactory factory = new XmlBeanFactory(resource);
2)
ClassPathResource resource = new ClassPathResource(“beans.xml”); BeanFactory factory = new XmlBeanFactory(resource);
当需要从多个文件中加载一个BeanFactory实例时候,可以像如下使用:
ApplicationContext ctx= new ClassPathXmlApplicationContext(new String[]{“beans.xml”,”application.xml”}); BeanFactory factory =ctx;
而Bean Factory通过Bean definition reader从多个文件中读取Bean定义,这样的话,我们可以这么处理,即组成基于XML配置元数据可以做如下配置:
<beans> <import resource="services.xml"/> <import resource="resources/messageSource.xml"/> <import resource="/resources/themeSource.xml"/> <bean id="bean1" class="..."/> <bean id="bean2" class="..."/> </beans>要求在完成bean定义之前导入所有的XML文件。
在BeanFactory中,与之关联最重要的类是:BeanWrapper。
Object object = Class.forName(“com.spring.service.impl.PersonServiceBean”).newInstance(); BeanWrapper beanWrapper = new BeanWrapperImpl(object); beanWrapper.setPropertyValue(“name”, “Jamson”);通过BeanWrapper,我们可以无需在编码时就指定JavaBean的实现类和属性值,通过在配置文件加以设定,就可以在运行期动态创建对象并设定其属性(依赖关系).
二 ApplicationContext
接口ApplicationContext来自于org.springframework.context.ApplicationContext,继承BeanFactory,除了支持BeanFactory的功能外,还能支持企业应用的其它功能,如:事务管理,国际化支持,以及AOP集成等等。通过类ApplicationContextAware类实现。比较常用的子接口为:AbstactApplicationContext。
例如:
ApplicationContext ctx = new ClassPathXmlApplicationContext(“application.xml”);
对于多个XML配置文件来读取一个ApplicationContext实例时,可以这样使用:
1) ApplicationContext ctx= new ClassPathXmlApplicationContext(new String[]{“beans.xml”,”application.xml”});
2) ApplicationContext context = new FileSystemXmlApplicationContext("c:/foo.xml");---不推荐使用
3) XmlApplicationContext:用来读取包含一个WebAppliction中的XML文件。
ApplictionContext的关闭,通过调用AbstractApplicationContext.close()来执行。而BeanFactory的关闭,可以通过destroy-method=”method”来实现。
三 创建bean的三种方法
1. 类构造器
如:<bean id=”personService” class=”com.spring.service.impl.PersonServiceBean”/>
下面给出一个Sample:
1) beans.xml配置
<bean id=”personService” class=”com.spring.service.impl.PersonServiceBean”/>
2) PersonService.java/PersonServiceBean.java
PersonService.java:
public interface PersonService { public void save(); } PersonServiceBean.java: public class PersonServiceBean implements PersonService{ public void save(){ System.out.println("Save Method is running."); } }
3) 测试类:SpringTest.java
public class SpringTest { /** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void instanceSpring(){ ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); PersonService personService = (PersonService)context.getBean("personService"); personService.save(); } }
Console执行:
Save method is running.
当然,在这个方法被调用之前,构造函数和init()方法都已经被调用。
2. 静态工厂(Static Factory)
如: <bean id=”personService” class=”com.spring.service.impl.PersonServiceBeanFactory” factory-method=”createPersonServiceBean”/>
1) beans.xml:
<bean id=”personService” class=”com.spring.service.impl.PersonServiceBeanFactory” factory-method=”createPersonServiceBean”/>
2) PersonService.java和PersonServiceBean.java同上
3) PersonServiceBeanFactory.java
public class PersonServiceBeanFactory { public static PersonServiceBean createPersonServiceBean(){ return new PersonServiceBean(); } }
4) SpringTest.java:同上
3. 实例工厂
如: <bean id=”personService” class=”com.spring.service.impl.PersonServiceBeanFactory” factory-bean=”PersonServiceBeanFacotory” factory-method=”createPersonServiceBean”/>
1) beans.xml:
<bean id=”personService” class=”com.spring.service.impl.PersonServiceBeanFactory” factory-bean=”PersonServiceBeanFacotory” factory-method=”createPersonServiceBean”/>
2) PersonService.java和PersonServiceBean.java同上
3) PersonServiceBeanFactory.java
public class PersonServiceBeanFactory { public PersonServiceBean createPersonServiceBean2(){ return new PersonServiceBean(); } }
4) SpringTest.java:同上
四 Bean的作用域
Bean的作用域在Spring中主要用到两个:Singleton(默认)和Prototype。
1. Singleton:
对于每个Spring Ioc容器而言,每个bean定义只有一个对象实例,这同Java对象中的Singleton不一样。在Spring中,singleton是基于Spring Ioc容器这个Level,而java中是针对与JVM这个Level。默认情况下,系统会在容器启动的时候加载,即在容器加载完成后去调用该Bean的默认构造函数。当然,可以在bean.xml中配置延迟加载(Lazy-init=”true”),或者是要求所有的bean都使用延迟加载(default-lazy-init=”true”).
2. Prototype:
对于Prototype而言,每次都会创建一个新的对象实例。而Bean的实例化是在调用getBean方法时。
五 Bean的生命周期
Bean是由Spring容器初始化,装配和管理的对象。Bean的生命周期主要是:
1) Bean实例化
Bean的默认构造函数。
2) Bean的初始化
Init()方法中可以进行初始化。
3) Bean的使用
getBean()方法可以获取当前的Bean,从而做相对应的业务操作。
4) Bean的销毁
destroy()方法执行bean的销毁。
六 Bean的XML元数据配置
对于所有的Bean配置,我们都是在XML中完成。所有的Bean属性配置可以参考http://www.springframework.org/schema/beans/spring-beans-2.5.xsd。
详细内容请看下面的一个Sample:
<bean id="personService" class="com.spring.service.impl.PersonServiceBean" scope="singleton" lazy-init="true" init-method="init" destroy-method="destory" autowire="autodetect" dependency-check="simple">
1. Scope:
这里同Web应用中的Scope一样,但是在Spring中,Singleton和Prototype是常用的Value。
2. Init-method:
就是初始化Bean时调用的方法
3. Destroy-method:
就是Bean销毁时候指定调用的方法
4. Autowire
Autowire:对应有五个Value,分别如下:
Mode | Desc |
No | 不使用自动装配,必须通过ref元素指定依赖,默认设置。 |
byname | 根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配 |
byType | 如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么事都不发生,也可以通过设置dependency-check="objects"让Spring抛出异常 |
Constructor | 与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一致的bean,那么抛出异常 |
Autodetect | 通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果没有发现默认的构造器,那么将使用byType方式 |
采用xml格式配置bean时,将<bean/>元素的autowire-candidate属性设置为false,这样容器在查找自动装配对象时,将不考虑该bean,即它不会被考虑作为其它bean自动装配的候选者,但是该bean本身还是可以使用自动装配来注入其它bean的.
不过,在日常的开发中,一般都是进行手工装配,很少用自动装配,因为手工装配易于开发管理。
5. Dependency-check
Dependency-check属性是同autowire属性一同使用,也就是说,只有在使用自动装载的时候,才会发挥作用。主要有四个Value:
Mode | Desc |
Simple | 对基本类型,字符型和集合进行依赖检查 |
Object | 对依赖的对象进行检查 |
All | 对全部属性进行检查 |
None | 不进行依赖检查 |
Default | 默认是none |
如:
< bean id="personService" class="com.spring.service.impl.PersonServiceBean" scope="singleton" autowire="autodetect" dependency-check="simple"> <property name=”name” value=”jamson”/> </bean>
是不能被子Bean所继承。
6. Abstract
Value值对应有true和false.一个bean组件没有指定实现类,而是通过设置abstract="true"属性来组织spring 容器实例化组件.abstract="true",表明这个bean只能作为其他bean的父bean使用,不能直接被实例化。
7. Factory-bean
只有使用实例工厂实例化bean的场合。
8. Factory-method
在使用非构造器方式实例化bean的场合。
9. 关于Collection的实例化
七 自动扫描管理Bean
自动扫描管理Bean,主要分为以下步骤:
1. XML配置
<context:component-scan base-package=”com.spring”/>
告诉Spring容器,在com.spring包包含子包下所有的Bean都委托给Spring容器扫描管理。
2. Bean的注解
对于Spring引入的注解有四种:@Service,@Controller,@Repository,@Component。
对于@Service,用于标注业务层组件。
对于@Controller,用于标注控制层组件。
对于@Repository, 用于标注数据访问层组件(即Dao层);
对于@Component,用于标注所有的组件,通常用于一个不宜归于上述三种组件类型的Bean组件。
更多详细的设置,可以参考:http://www.springframework.org/schema/context/spring-context-2.5.xsd。
发表评论
-
OS Workflow Intruction
2011-03-14 01:58 1684OSWorkflow是一个灵活的工作流引擎,设计成可嵌入到企业 ... -
EJB学习之五---MDB(消息驱动EJB)
2010-09-06 13:32 2311前面已经介绍过EJB的Session Bean,这篇文章主要介 ... -
SSL单双向验证原理(转)
2010-06-07 22:34 2932Key points SSL验证 双向SSL ... -
Spring2.5学习之三----AOP研究
2010-05-31 12:09 6515Key Points AOP的基本概念 Advice的类型 A ... -
Spring2.5学习之二----依赖注入
2010-05-30 17:22 2471Key points 依赖注入的原理 依赖注入的方式---XM ... -
EJB3学习之四----EJB3新特性(元数据注解和依赖注入)
2010-05-13 01:39 4180EJB3新特性 元数据注解 依赖注入 一 EJB3新特性 ... -
Ejb3学习之二----Ejb3的Ejb Bean类型介绍
2010-05-11 23:01 3288关于Ejb3的Ejb bean类型介 ... -
EJB学习之三---Local和Remote接口
2010-05-10 23:12 8315这篇文章主要来学习Ejb的组成元素,重点介绍Local和Rem ... -
Ejb学习之一---EJB3+Jboss4.2配置开发
2010-05-09 02:59 2900昨天,打算把Ejb整理下,最早用到Ejb+Jboss是在三年前 ... -
Struts Taglib库之(一)Bean讲解
2010-05-05 23:29 0最近准备换工作,也想把一些工作中用到的技术进行链接起来,就把它 ... -
转:Hibernate中cascade和inverse的相关
2011-11-19 17:51 684FROM:http://developer.51cto.com ... -
Struts1和Struts2有何不同?
2010-04-19 00:42 0Struts1和Struts2的区别和对比: Action ... -
Struts2中的Vistor模式
2010-04-19 00:40 1559Visitor访问者模式定义 作用于某个对象群中各个对象的操作 ... -
Spring中的Singleton模式和Prototype模式
2010-04-19 00:06 1835对于在Spring+Struts2结合配置Action=&qu ... -
WebService介绍
2010-04-18 17:01 2982记得初次接触WebService是 ... -
Spring中的Singleton模式和Java中的Singleton模式
2010-04-17 17:09 12699对于Spring中实现Singleton模式,是以IOC容器为 ... -
JavaMail来读取和发送邮件的基本流程
2010-04-15 01:21 1945在应用程序中使用JavaMail来读取邮件的基本流程如下: ... -
SSH框架优缺点【转】
2010-04-15 00:53 6179在过去的一年里,可能 ... -
J2EE面试题
2010-04-14 11:17 0一、基础问答 1.下 ... -
JTOM
2010-04-13 00:24 0JTOM是一个基于Java开放源代码的事物处理管理器。它遵 ...
相关推荐
Spring框架是Java开发中最广泛使用的轻量级框架之一,它提供了一种模块化的方式来构建企业级应用。"spring.jar"是Spring框架的核心库,包含了核心容器、AOP(面向切面编程)、上下文、表达式语言等模块。这个核心库...
在这个阶段,你将学习到BeanFactory如何解析XML配置,创建Bean实例,并执行初始化方法,理解Bean的生命周期管理。 “tiny-spring-step-3-inject-bean-with-property.zip”带你走进依赖注入的世界。这个步骤通过属性...
在Spring框架中,定时任务是应用开发中常见的一种需求,例如执行日志清理、数据同步或者定时发送邮件等。本文将深入探讨Spring提供的两种定时器——`Quartz`和`Spring Task`,并进行对比分析。 首先,让我们了解`...
在本篇"Spring学习之八--Hibernate编程式事务"中,我们将探讨如何在Spring框架中使用Hibernate进行编程式事务管理。编程式事务管理是相对于声明式事务管理的一种方式,它允许开发者通过代码来显式控制事务的开始、...
3. **Spring的依赖注入(Dependency Injection, DI)**: Spring的核心特性之一是DI,它允许开发者通过声明式方式管理对象及其依赖关系。在Spring与Hibernate的整合中,DI使得我们可以轻松地将数据访问层(DAO)对象...
SpringBean是Spring框架的核心概念之一,它是Spring IoC容器管理的对象。在普元EOS平台中,SpringBean同样扮演着重要角色,用于封装业务逻辑、数据访问等功能。通过合理地设计和配置SpringBean,可以极大地提高开发...
在Java开发中,Spring Boot以其简洁、高效的特性,已经成为Web开发框架的首选之一。它通过自动配置和启动器(starter)来简化应用的搭建与运行。而当我们涉及到大数据存储与处理时,Apache HBase作为NoSQL数据库的一...
在Spring框架中,实例化Bean是其核心功能之一,它为开发者提供了多种方式来创建和管理对象。这篇“Spring学习笔记(2)----实例化Bean的三种方式”着重讲解了如何在Spring应用上下文中初始化Bean。以下是这三种方式...
标题中的“spring-tool-suite-4-4.13.0.RELEASE-e4.22.0-linux”指的是一款基于Eclipse平台的Spring Tool Suite(STS)开发...对于想要学习或使用Spring框架的Java开发者来说,Spring Tool Suite是不可或缺的工具之一。
1. **起步依赖(Starter Dependencies)**:Spring Boot 的关键特性之一就是起步依赖,这些预配置的 Maven 或 Gradle 依赖可以帮助开发者快速开始项目,比如 `spring-boot-starter-web` 可用于构建 Web 应用。...
Bean的类名则指定了Bean的实现类,Spring将根据这个类名创建Bean实例。 其次,Bean的初始化方法和销毁方法允许我们自定义Bean的生命周期。初始化方法在Bean创建后且所有依赖注入完成之前调用,而销毁方法在Bean被...
2. **初始化**:当Spring IoC容器加载时,会根据配置文件中的信息创建Bean实例,并执行任何指定的初始化方法。 3. **使用**:开发者可以通过Spring容器获取Bean的实例并进行使用。 4. **销毁**:在某些情况下,...
其中,对Java 8的支持是这个版本的重要更新之一,允许开发者充分利用Java 8的新特性,如lambda表达式和日期时间API。 在依赖注入方面,Spring 4.2.0.RELEASE进一步简化了配置,通过Java配置类和注解,使得代码更加...
Spring框架是Java开发中最常用的轻量级框架之一,它以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)为核心特性,极大地简化了企业级应用的开发工作。本总结将围绕...
### JavaEE5学习笔记05-EJB之会话Bean总结 #### EJB(Enterprise JavaBeans)简介 EJB(Enterprise JavaBeans)是Java EE平台的一部分,用于开发和部署可重用的服务组件。EJB规范定义了如何编写、部署以及管理企业...
在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...
Spring IOC,全称为Inversion of Control,中文常被称为“控制反转”,是Spring框架的核心特性之一。这个概念在软件设计中引入了一种新的依赖管理方式,它将对象的创建和管理权交给了容器,使得开发者可以更专注于...
在使用Spring 5.0.2.RELEASE中文注释版时,开发者可以清晰地理解每个类、接口和方法的功能,这对于深入学习和掌握Spring至关重要。例如,`org.springframework.beans.factory.BeanFactory`接口定义了容器的基本操作...
2. **自动配置**: Spring Boot 的核心特性之一是自动配置。当你在项目中引入特定的依赖,Spring Boot 会尝试根据类路径中的存在情况自动配置相关的bean。例如,添加了`spring-boot-starter-web`,它将自动配置Tomcat...
Spring框架,作为Java开发领域中的核心框架之一,自诞生以来就以其强大的功能、优秀的可扩展性和模块化的结构赢得了广大开发者们的青睐。2.5.6版本是Spring在2008年10月发布的一个稳定版本,它在前一版本的基础上...