第一部分 spring的核心
第一章 开始spring之旅
spring的主要特性是控制反转/依赖注入IoC/DI和面向切面编程AOP
第二章 基本Bean装配
2.1.1 BeanFactory
BeanFactory是spring的基础,负责创建和分发Bean。在xml中配置好相关bean之后:
BeanFactory bf = new XmlBeanFactory(new FileSystemResource("src/com/test/bean.xml"));B b1 = (B) bf.getBean("b");
2.1.2 应用上下文
ApplicationContext实际是BeanFactory的更高级封装,提供了一些附加功能,比如aop支持等等,几乎所有系统都会选择用ApplicationContext而不是BeanFactory。与上面相同xml配置下:
/* ApplicationContext ac = new FileSystemXmlApplicationContext("src/com/test/bean.xml"); */ApplicationContext ac = new ClassPathXmlApplicationContext("com/test/bean.xml");
B b1 = (B) ac.getBean("b");
2.3 注入Bean属性
可通过构造函数或setter方法注入,
<bean id="b" class="com.test.Bimpl">
<constructor-arg value="xxxxxxxxxxxxxxx" />
<property name="a" ref="a" />
</bean>
注入基本类型:
<property name="a" value="1" />
注入其他bean:(先定义bean,然后ref引用)
<property name="a" ref="beanID" />
<ref bean="beanID2"/>
</list>
<set>同上。
<map>
<entry key="ABC" value-ref="abc"> //key 为string value为bean引用
<entry key-ref="ABC" value="abc"> //key-ref 为bean引用 value 为string
</map>
<props>
<prop key="ABC">abc</prop>
</props>
注入空值:
<null/>
2.4 自动注入
常用的两种:byName和byType
如果找到多个或一个没找到,都会抛出异常。
<bean id="b" class="com.test.Bimpl" autowire="byType" >
<constructor-arg value="xxxxxxxxxxxxxxx" />
<property name="a" ref="a" />
</bean>
全局默认设置:
<beans default-autowire="byName">
2.5 控制bean创建
默认时,所有spring bean都是单一的,也就是默认注入时,都是用容器内的该bean的同一个实例。
加如下属性可以控制bean范围:
<bean id="b" class="com.test.Bimpl" scope="prototype" >
bean范围:
1、singleton 每个spring容器内就一个实例(默认)
2、prototype 每次分配都是新的实例
注:通常的单例模式和上述的spring singleton是有区别的,spring singleton只是保证在spring 容器中是单例的。如果要实现通常的单例模式,通常采用private构造函数,并提供单一实例获取的统一方法来实现。因此可以配置通过非构造函数的某一方法来实例化bean,如下:
<bean id="b" class="com.test.Bimpl" factory-method="getInstanceMethod" >
注入集合:
spring支持的4种集合注入
<list>:允许重复
<set>:不允许重复
<map>:值对
<props>:String对
<list>
<ref bean="beanID1"/>