学习《Spring in action》--摘要内容
当你在Spring框架中配置任何Bean的时候,你是在给Spring容器发送命令,了解容器有助于理解Bean是怎样被管理的。
1、依赖注入(Ioc)
使用Ioc,对象的依赖都是在对象创建时由负责协调系统中各个对象的外部实体提供的。这就是依赖被注入到对象中。
2、装配
在Spring容器内拼凑Bean叫做装配。
创建系统组件之间关联的动作叫做装配。
在Spring中,有很多方式可以把组件装配起来,但是,最常见就是使用XML。
理论上,Bean装配可以从任何配置资源获得,包括属性文件、关系数据库甚至是LDAP目录。
在Spring应用系统中,BeanFactory负责装载Bean的定义并把他们装配起来。
3、Spring核心容器工作细节
通常情况下,对于某方法不常使用,只有少数需要使用时被注入的设置即可,以setter方法注入,而对于经常被用到的,以构造函数方式注入设置。
Spring实际上有两种不同的容器,分别是Bean工厂(最简单的容器)和应用上下文(建立在Bean工厂基础之上)。
除了以上两种容器以外,Spring 有几种BeanFactory和ApplicationContext的实现。
在Spring中有几种BeanFactory的实现,其中最常使用的是org.spring.framework.beans.factory.xml.XmlBeanFactory,它根据XML文件中的定义装载Bean
在ApplicationContext的诸多实现中,有三个实现经常用到:
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext —- 一种基于Spring的Web应用系统上下文,它从Web应用上下文中载入上下文定义文件。
4、装配控制
5、配置
上下文定义文件的根元素是<beans>,<beans>有多个<bean>子元素。每个<bean>元素定义了一个Bean(或任何一个Java对象)如何装配到Spring容器中。
<bean>元素的子元素<property>指明了使用它们的set方法来注入。在<property>元素中,你可以定义你要配置的属性以及你要注入的值。并且就象你看到的,你可以注入任何东西,从基本类型到集合类,甚至是应用系统中的Bean。
如何在Spring中设置Bean属性,先从注入设置开始:
(1)通过Set方法注入依赖
①注入对象的情况
给Bean设置简单类型的属性:通过<property> 的子元素<value>可以设置基本类型属性,如int和float,或java.lang.String。Spring将自动判断简单类型并且将其转换成何时的值。
引用其他Bean:我们使用<property>元素的子元素<ref>来设置指向其他Bean的属性。
内部Bean:一种不常使用的装配Bean引用的方法是在<property>元素中嵌入一个<bean>元素,这种装配Bean引用的方式的缺点是你无法在其他地方重用嵌入的实例,因为它是一个专为被嵌入Bean建立的实例。
②注入对象集的情况
装配集合<list> <set> <map> <props> 对应的类型分别为arrays、Set、Map、Properties。
装配List和数组:
<property name=”aaa”>
<list>
<value>bbb</value>
<ref bean=”xxx”>
......
</list>
</property>
装配Set:
<property name=”aaa”>
<set>
<value>bbb</value>
<ref bean=”xxx”>
......
</set>
</property>
装配Map:
<property name=”aaa”>
<map>
<entry key=”xxxxx1”>
<value>xxx</value>
</entry>
<entry key=”xxxxx2”>
<ref bean=”xxx”/>
</entry>
......
</map>
</property>
配置entry时,属性key的值只能是String。
装配Properties:
props和map的使用方法都很相似,它们最大的区别就是<prop>的值只能是String型,所以没有必要使用<value>元素来区分String型数值和非String型数值。
<property name=”xxxx”>
<props key=”key1”>bar1</props>
<props key=”key2”>bar2</props>
</property>
设置null:
设置属性foo的值为null的写法如下:
<property name=”foo”><null/></property>
Set注入的替代:
Set注入是一种装配Bean属性的直接方式。但是Set注入的一个缺点是它假设了所有的可变属性都可以通过set方法访问到。然而,一种替代方式是通过构造函数设置一些属性的值。
(2)通过构造函数注入依赖
6、生命周期管理