基本Bean装配 《Srping in action》阅读笔记
容器可以创建组件,装配和配置组件,以及管理他们的整个生命周期。容器是Spring框架的核心,Spring容器使用DI管理所以组成应用系统的组件。
Spring提供多种容器实现,并分为两类:Bean工厂(由org.springframework.beans.factory.BeanFactory接口定义),是最简单的容器,提供了基础的依赖注入支持。应用上下文(由org.springframework.context.ApplicationContext接口定义)建立在Bean工厂基础之上,提供了系统架构服务,如:从属性文件中读取文本信息,向有关的事件监听器发布事件。
ApplicationContext和BeanFactory都是载入Bean定义信息,装配Bean,根据需要分发Bean。但是ApplicationContext提供更多的功能:
1.提供文本信息解析工具,包括国际化I18N的支持
2.提供载入文件资源的通用方法,如载入图片
3.可以向注册为监听器的Bean发送事件
由于提供的附加功能,因此应用系统几乎都选择ApplicationContext。
BeanFactory的一个示例:
BeanFactory factory=new XmlBeanFactory(new FileSystemResource("c:/beans.xml"));
ApplicationContext常用的三个实现:
ClassPathXmlApplicationContext--从类路径的XML文件载入上下文定义信息
FileSystemXmlApplicationContext--从文件系统的XML文件载入上下文定义信息
XmlWebApplicationContext--从Web系统中的XML文件载入上下文定义信息
例:ApplicationContext context=new FileSystemXmlApplicationContext("c:/foo.xml");
ApplicationContext context=new ClassPathXmlApplicationContext("foo.xml");
创建Bean:
1.声明一个bean
<bean id="duke" class="com.springinaction.springidol.Juggler"/>
2.通过构造函数注入
<bean id="duke" class="com.springinaction.springidol.Juggler">
<consturctor-arg value="15"/> //注入简单参数
<consturctor-arg ref="sonnet"/> //注入一个bean
<bean/>
3.注入Bean属性
<bean id="kenny" class="com.springinaction.springidol.Insturmentalist">
<property name="song" value="Jingle Bells"/> //注入简单参数
<property name="song" ref="piano"/> //注入一个bean
</bean>
4.集合装配
<list>:允许重复
<bean id="hank" class="com..springinaction.springidol.OneManBand">
<property name="instrucments">
<list>
<ref bean="guitar"/>
<ref bean="cymbal"/>
<ref bean="harmonica"/>
</list>
</property>
</bean>
<set>:确保无重复,重复的被忽略
<bean id="hank" class="com..springinaction.springidol.OneManBand">
<property name="instrucments">
<set>
<ref bean="guitar"/>
<ref bean="cymbal"/>
<ref bean="harmonica"/>
</set>
</property>
</bean>
<map>:名值对的集合,名值可以是任意类型
<bean id="hank" class="com..springinaction.springidol.OneManBand">
<property name="instrucments">
<map>
<entry key="GRITAR" value-ref="guitar"/>
<entry key="CYMBAL" value-ref="cymbal"/>
<entry key="HARMONICA" value-ref="hrmonica"/>
</map>
</property>
</bean>
<map>:名值对的集合,名值只能是String类型
<bean id="hank" class="com..springinaction.springidol.OneManBand">
<property name="instrucments">
<props>
<prop key="GRITAR" >AAAAA</prop>
<prop key="CYMBAL" >BBBBB</prop>
<prop key="HARMONICA" >CCCC</prop>
</props>
</property>
</bean>
控制Bean的创建:
1.默认时,所有spring bean都是单例的。为了使得每次都能产生一个新的Bean实例,可以声明Bean的scope属性为prototype。
2.利用工厂方法创建bean
<bean id="theStage" calss="com..springinaction.springidol.Stage" factory-method="getInstance">