参阅:Spring Framework 开发参考手册
(spring2.0-reference_final_zh_cn.chm)
第三部分:Spring核心技术
一、容器和bean的基本原理
1、Spring中的bean概念
在Spring中,那些组成应用的主体(backbone)及由Spring IoC容器所管理的对象被称之为bean。简单地讲,bean就是由Spring容器初始化、装配及被管理的对象,除此之外,bean就没有特别之处了(与应用中的其他对象没有什么区别)。而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
1、 容器
org.springframework.beans及org.springframework.context包是Spring IoC容器的基础。BeanFactory提供的高级配置机制,使得管理任何性质的对象成为可能。ApplicationContext是BeanFactory的扩展,功能得到了进一步增强,比如更易与Spring AOP集成、消息资源处理(国际化处理)、事件传递及各种不同应用层的context实现(如针对web应用的WebApplicationContext)。
org.springframework.beans.factory.BeanFactory是Spring IoC容器的实际代表者,IoC容器负责容纳此前所描述的bean,并对bean进行管理。在Spring中,BeanFactory是IoC容器的核心接口。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。Spring为我们提供了许多易用的BeanFactory实现,XmlBeanFactory就是最常用的一个。该实现将以XML方式描述组成应用的对象以及对象间的依赖关系。XmlBeanFactory类将持有此XML配置元数据,并用它来构建一个完全可配置的系统或应用。 3、接口选择之惑
在实际应用中,用户有时候不知道到底是选择BeanFactory接口还是ApplicationContext接口。但是通常在构建J2EE应用时,使用ApplicationContext将是更好的选择,因为它不仅提供了BeanFactory的所有特性,同时也允许使用更多的声明方式来得到我们想要的功能。
4、配置元数据
Spring支持三种配置元数据格式:XML格式、Java属性文件格式或使用Spring公共API编程实现。由于XML元数据配置格式简单明了,故常采用该格式来表达Spring IoC容器的主要理念和特性。
5、实例化容器的方法
A:FileSystemResource
Resource resource = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
B:ClassPathResource(同A)
C:ClassPathXmlApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"applicationContext.xml", "applicationContext-part2.xml"});// of course, an ApplicationContext is just a BeanFactory
BeanFactory factory = (BeanFactory) context;
6、实例化bean的方法
A:用构造器来实例化
B:使用 静态工厂方法实例化
<bean id="exampleBean" class="examples.ExampleBean2"
factory-method="createInstance"/>
C:使用实例工厂方法实例化
<bean id="myFactoryBean" class="..."> ...</bean><bean id="exampleBean" factory-bean="myFactoryBean"
factory-method="createInstance"/>
二、依赖
1、依赖注入(DI)主要有两种注入方式,即Setter注入和 构造器注入。
l Setter注入:通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的DI。
l 构造器注入:基于构造器的DI通过调用带参数的构造器来实现,每个参数代表着一个协作者。此外,还可通过给静态工厂方法传参数来构造bean。
2、如何在构造器注入和Setter注入之间进行选择?
由于大量的构造器参数可能使程序变得笨拙,特别是当某些属性是可选的时候。因此通常情况下,Spring开发团队提倡使用setter注入。
尽管如此,构造器注入因为某些原因还是受到了一些人的青睐。一次性将所有依赖注入的做法意味着,在未完全初始化的状态下,此对象不会返回给客户代码(或被调用),此外对象也不可能再次被重新配置(或重新注入)。对于注入类型的选择并没硬性的规定。只要能适合你的应用,无论使用何种类型的DI都可以。对于那些没有源代码的第三方类,或者没有提供setter方法的遗留代码,我们则别无选择--构造器注入将是你唯一的选择。
3、循环依赖
当你主要使用构造器注入的方式配置bean时,很有可能会产生循环依赖的情况。
对于此问题,一个可能的解决方法就是修改源代码,将构造器注入改为setter注入。另一个解决方法就是完全放弃使用构造器注入,只使用setter注入。
4、构造器参数的解析
l 构造器参数类型匹配
l 构造器参数的索引
注意:index属性值从0开始。指定构造器参数索引是使用构造器IoC首选的方式。
5、bean属性及构造器参数详解
bean的属性及构造器参数既可以引用容器中的其他bean,也可以是内联(inline,在spring的XML配置中使用<property/>和<constructor-arg/>元素定义)bean。
(1)、直接量(基本类型、Strings类型等。) <value/>元素
(2)、引用其它的bean(协作者)
<ref bean="someBean"/>:可以引用同一容器或父容器内的任何bean(无论是否在同一XML文件中)。XML 'bean'元素的值既可以是指定bean的id值也可以是其name值。
<ref local="someBean"/>:local属性值必须是目标bean的id属性值。如果在同一配置文件中没有找到引用的bean,XML解析器将抛出一个例外。
<ref parent="accountService"/>:parent属性值既可以是目标bean的id值,也可以是name属性值。而且目标bean必须在当前容器的父容器中。使用parent属性的主要用途是为了用某个与父容器中的bean同名的代理来包装父容器中的一个bean。
(3)、内部bean
(4)、集合
(5)、Nulls:<null/>用于处理null值。Spring会把属性的空参数当作空字符串处理。以下的xml片断将email属性设为空字符串。
(6)、XML-based configuration metadata shortcuts
针对常见的value值或bean的引用,Spring提供了简化格式用于替代<value/>和<ref/>元素。<property/>、<constructor-arg/>及<entry/>元素都支持value属性(attribute),它可以用来替代内嵌的<value/>元素。
(7)、组合属性名称 <property name="fred.bob.sammy" value="123" />
6、使用depends-on
7、延迟初始化bean
8、自动装配(autowire)协作者
9、依赖检查
三、bean的作用域
四、定制bean特性
分享到:
相关推荐
Spring基础知识汇总 Java开发必看
Spring基础知识详解
Spring基础知识汇总Java开发必看
Spring的基础知识
spring的知识整理和框架的结合开发。 IOC 控制反转(Inversion of Control)、 依赖注入(Dependency Injection)等基础知识的详细讲解。
资源包含如下: 1,JAVA_IO详解_包括讲解IO中各种流及其用法.pdf 2,Java集合排序及java集合类详解.pdf 3,JDBC入门电子书.pdf 4,Spring源代码解析.pdf 5,第三章 Servlet 最佳实践.pdf
学习Spring必学的Java基础知识(含数据库事务基础知识)
spring基础知识,适合初学者,包括Spring的AOP面相切面编程等内容
Spring入门基础知识带jar包
2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。 很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。 Spring理念 : 使现有技术更加实用 ....
《Spring基础进阶技巧200篇》是一本关于Spring框架的资源,它提供了200篇文章,涵盖了Spring框架的基础知识和...这本资源适合已经具备一定Spring基础知识的开发人员,希望进一步深入学习和应用Spring框架的技术人员。
spring从搭建配置到简单开发的一个整体流程,比较适合打基础的朋友!
主题:学习Spring必学的Java基础知识(1)----反射主题:学习Spring必学的Java基础知识(1)----反射主题:学习Spring必学的Java基础知识(1)----反射
以思维导图的形式对Spring的基础理论知识进行一个汇总,思维导图中包含Spring简介、背景、特征、特点、优点、缺点及其Spring版本迭代做了详细介绍。
spring依赖注入基础知识,适合新手学习浏览,用idea环境搭建,数据库需要自己修改
Spring框架概述 Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度...
springcloud
spring基础知识 基础框架 java工厂模式
Spring MVC属于SpringFrameWork的后续产品,已经融合在..., 精通Spring MVC4zui适合已经熟悉Spring编程基础知识并迫切希望扩展其Web技能的开发人员。通过阅读本书,读者将深度把握Spring MVC的各项特性及实用技巧。
关于SpringCloud基础知识整理,以及部分热点技术整理