Spring框架二
Bean管理
1、BeanFactory介绍:Spring容器,也称为Spring的上下文,是产生Bean的工厂,是Spring依赖注入的核心。
Bean:在Spring应用场景中,Bean可以使数据源,java普通类,还可以是hibernate框架的sessionFactory、事务组件等等
1、在Spring技术中是基于组件的。
2、最基本也是最常见的单元。
3、其实例保存在Spring容器当中
2、BeanFactory的作用:
1、配置、创建以及管理Bean对象
2、维持Bean对象之间的依赖关系。
3、负责Bean对象的生命周期。
3、ApplicationContext实现类:
1、读取Bean定义文件。
2、维护Bean之间的依赖关系。
3、国际化的支持。
4、资源访问、事件传播
4、Bean定义
1、配置文件:
1、<beans/>是Spring配置文件的根节点。
2、一个<beans/>节点里面可以有多个<bean/>节点
2、定义<bean/>节点:通常指定2个属性:id用来指定bean的唯一标识符,class用来指明bean的具体实现类。
3、Bean在Spring容器中的两种行为:
singleton:整个Spring容器只有一个共享实例存在,也就是单例;
non-singleton:非单例,每次请求该Bean,Spring容器都会新建立一个Bean实例。
5、创建Bean:
1、Bean的命名:使用清晰的,描述性的,一致性的命名规范。查找顺序id--name---类名
2、Bean的别名:通过alias元素指定 如<alias name="fromname" alias="alisaname" />
3、生命一个简单Bean:创建xml文件---写入配置信息---生成Bean类---加入Bean到配置文件。
4、注入属性:
a、注入基本类型和String类型:使用<value>元素,XML解析器以String类型解析出来,再通过propertyEditots转换类型。
b、注入Bean:<ref/>元素进行标识,ref元素的来个属性Bean:表示来自不同xml的bean,local:表示来自相同xml的bean。
c、注入集合类型属性:(1)List属性:<list>标签中间可以使用<value>、<ref>等标签注入集合元素,甚至是另外一个<list>标签。
(2)例<list><value>1</value><value>2</value>.....</list>
(3)set属性:<set>标签,用法与<list>
(4)Map属性:<map>标签,如果Map中的键或者值是Bean对象,可以把<value>换成<ref>
例:<map> <entry><key><value>键</value></key> <value>值</value></entry></map>
(5)properties类型属性:使用<props>标签,其键和值通常为字符串类型
例:<props> <prop key="keyname">值</prop>....</props>
(6)注入空值:<value></value>,注入NULL值<null/>
5、Bean元素的作用域:使用scope属性指定:
1、singleton:默认值,单例
2、prototype:非单例。
3、request:用于WEB应用环境,针对每次HTTP请求都会创建一个新的Bean实例。
4、session:用于WEB应用环境,针对每次会话都会创建一个新的Bean实例。
5、global session:尽在porlet的web应用中使用,全局会话创建一个实例。
6、简化Spring loc配置
1、使用p命名空间注入Bean属性:必须先添加命名空间的声明
<beans> <!-- 添加p命名空间的声明 --> xmlns:p="http://www.springframework.org/schema/p" <!-- 使用p命名空间注入Bean的属性 --> <bean id="name" class="spring.HelloSpring" p:name="林冲" /> </benas>
2、在Spring配置文件中实现自动装配:<bean>元素的autowire提供了一种自动注入依赖对象的机制,配置Bean时不需要做任何显示指定,Spring会自动查找符合条件的依赖对象并实施注入。
例:no:默认值,不自动装载。 byName:根据属性名自动匹配。 byType:根据属性的类型自动匹配。 constructor:根据构造方法自动匹配。
<!-- 使用自动装载注入依赖对象,在spring.HelloSpring中的属性名,自动查找配置的Bean进行注入--> <bean id="name" class="spring.HelloSpring" autowire="byName" />
6、高级管理:
1、构造方法注入:使用constructor-org标签
<bean id="id" class="calss"> <!--index表示构造参数的顺序下标,从0开始--> <!--使用该方法注入时,实体类必须有相应的构造方法--> <constructor-org index="0"> <value>value1</value> </constructor> </bean>
2、aware相关接口:
3、Bean属性编辑器:PropertyPlaceholderConfigurer-属性占位符编辑器
作用:读取properties配置文件,修改某属性时不需要打开Spring配置文件,保证不会将新的错误导入Spring配置文件中。
优点:可以从主xml配置文件中分离出部分配置信息,可以支持多个配置文件
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> <property name="locations"> <list> <value>db.properties</value> <!-- 如果有多个配置文件,加入多个value标签即可 --> </list> </property> </bean>
propertyOverrodeConfigurer-另外一种占位符编辑器
会覆盖掉xml文件中的配置信息,属性格式为:BeanName.property=value