2.5 FactoryBean
2.5.1 FactoryBean
Spring中有两种类型的bean,一种是普通bean,另一种是工厂bean,即FactoryBean。
工厂bean跟普通bean不同,其返回的对象不是指定类的一个实例,其返回的是该工 厂bean的getObject方法所返回的对象。
工厂bean必须实现org.springframework.beans.factory.FactoryBean接口。
<bean id="product" class="com.atguigu.spring.bean.ProductFactory"> <property name="productName" value="Mp3" /> </bean> |
2.6 bean的高级配置
2.6.1 配置信息的继承
1. 背景
查看下面两个Employee的配置,其中dept属性是重复的。
<bean id="dept" class="com.atguigu.parent.bean.Department"> <property name="deptId" value="100"/> <property name="deptName" value="IT"/> </bean>
<bean id="emp01" class="com.atguigu.parent.bean.Employee"> <property name="empId" value="1001"/> <property name="empName" value="Tom"/> <property name="age" value="20"/>
<!-- 重复的属性值 --> <property name="dept" ref="dept"/> </bean>
<bean id="emp02" class="com.atguigu.parent.bean.Employee"> <property name="empId" value="1002"/> <property name="empName" value="Jerry"/> <property name="age" value="25"/>
<!-- 重复的属性值 --> <property name="dept" ref="dept"/> </bean> |
2. 配置信息的继承
<!-- 以emp01作为父bean,继承后可以省略公共属性值的配置 --> <bean id="emp02" parent="emp01"> <property name="empId" value="1002"/> <property name="empName" value="Jerry"/> <property name="age" value="25"/> </bean> |
Spring允许继承bean的配置,被继承的bean称为父bean。继承这个父bean的bean 称为子bean
子bean从父bean中继承配置,包括bean的属性配置
子bean也可以覆盖从父bean继承过来的配置
3. 补充说明
父bean可以作为配置模板,也可以作为bean实例。若只想把父bean作为模板,可以设置<bean>的abstract 属性为true,这样Spring将不会实例化这个bean
如果一个bean的class属性没有指定,则必须是抽象bean
并不是<bean>元素里的所有属性都会被继承。比如:autowire,abstract等。
也可以忽略父bean的class属性,让子bean指定自己的类,而共享相同的属性配置。 但 此时abstract必须设为true。
2.6.2 bean之间的依赖
有的时候创建一个bean的时候需要保证另外一个bean也被创建,这时我们称前面的bean对后面的bean有依赖。例如:要求创建Employee对象的时候必须创建Department。 这里需要注意的是依赖关系不等于引用关系,Employee即使依赖Department也可以不引用它。
<bean id="emp03" class="com.atguigu.parent.bean.Employee" depends-on="dept"> <property name="empId" value="1003"/> <property name="empName" value="Kate"/> <property name="age" value="21"/> </bean> |
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。