本系列笔记来自对《Spring实战》第三版的整理,Spring版本为3.0 spring是为了解决企业级应用开发的复杂性而创建的,spring最根本的使命是:简化Java开发。为降低开发复杂性有以下四种关键策略。
假设类A依赖类B,通常做法是在类A中声明类B,然后使用,这样一方面具有极高的耦合性,将类A与类B绑定在一起;另一方面也让单元测试变得很困难,无法在A外部获得B的执行情况。
通过依赖注入,对象的依赖管理将不用对象本身来管理,将由一个第三方组件在创建对象时设定,依赖关系将被自动注入到对应的对象中去。
ClassPathXmlApplicationContext()
从类路径创建FileSystemXmlApplicationContext()
读取文件系统下的xml配置XmlWebApplicationContext()
读取web应用下的XML配置文件并装载上下文定义<bean id="bean1" class="com.example.Class"/>
所有Spring Bean默认都是单例的。通过配置scope属性为prototype可每次请求产生一个新的实例。
<bean id="bean3" class="com.example.class" scope="prototype">
scope可选值:
singleton
:每个容器中,一个Bean对象只有一个实例。(默认)prototype
:允许实例化任意次 ,每次请求都会创建新的request
:作用域为一次http请求session
:作用域为一个http session会话global-session
:作用域为一个全局http session,仅在Protlet上下文中有效 当实例化需要执行初始化操作,或者销毁时需要执行清理工作。两种实现方式:
InitializingBean
和DisposableBean
接口 在bean中使用<property>
元素配置属性,使用方法类似于<constructor-arg>
<property name="name" value="fxg"/> //注入基本数据类型
<property name="sex" ref="sex"/> //注入类
可使用p简写,**-ref**后缀说明装配的是一个引用
<bean id="bean5" class="com.example.class"
p:name="fxb"
p:sex-ref="sex"/>
既定义其他Bean内部的Bean,避免共享问题,可在属性节点或者构造器参数节点上使用。
<property name="sex">
<bean class="com.example.sex"/> //没有id属性,因为不会被其他bean使用
</property>
<constructor-arg>
<bean class="com.example.sex"/>
</constructor-arg>
集合元素 | 用途 |
---|---|
<list> | 装配list类型,允许重复 |
<set> | set,不能重复 |
<map> | map类型 |
<props> | properties类型,键值都为String |
<property name="name"><null/></property>