体验spring(六)---depends-on及parent
depend-on、延迟初始化Bean、 Bean定义的继承
depend-on ? Bean定义的继承 ? 延迟初始化Bean在体验spring(三)中已有补充 ?案例:StudentServiceImpl.javapublic class StudentServiceImpl {/**默认构造器*/public StudentServiceImpl() {System.out.println("studnetService初始化完成...");}}public class TeacherServiceImpl {/**默认构造器*/public TeacherServiceImpl() {System.out.println("teacherservice初始化完毕...");}}dependson.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!--1、depends-on 在初始化teacherServiceImpl之前进行初始化depends-on的属性值匹配的bean2、你也可以吧teacherServiceImpl所以依赖的bean都放在teacherService之前并且scope是singleton模式即可备注: 只使用第一种方式即可。--><bean id="studentServiceImpl" scope=" singleton "/> <bean id="teacherServiceImpl" scope="singleton" /> </beans>运行结果:studnetService初始化完成...teacherservice初始化完毕...注意的问题:1.若teacherServiceImpl的bean在前 作用域为scope=’singleton’ studentServiceImpl的bean在后 作用域也为scope=’singleton’则运行结果为:teacherservice初始化完毕...studnetService初始化完成...2. 若teacherServiceImpl的bean在前 作用域为scope=’singleton’ 并且在其中添加depends-on=’ studentServiceImpl’ studentServiceImpl的bean在后 作用域也为scope=’singleton’则运行结果为:studnetService初始化完成...teacherservice初始化完毕...3.若studentServiceImpl的bean在前 并且其作用域改为scope=’prototype’ 则运行结果为:teacherservice初始化完毕...4.若studentServiceImpl的bean在前其作用域仍为scope=’prototype’而在teacherServiceImpl的bean中添加depends-on=’ studentServiceImpl’ 其作用域为scope=’singleton’ 则运行结果为:studnetService初始化完成...teacherservice初始化完毕...可依据上述结果相互比较来理解depend-on的使用方法案例:EmpServiceImpl.javapublic class EmpServiceImpl {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}HourEmpServiceImpl.javapublic class HourEmpServiceImpl extends EmpServiceImpl{ private Integer hours;public void setHours(Integer hours) {this.hours = hours;}}RegularEmpServiceImpl.javapublic class RegularEmpServiceImpl extends EmpServiceImpl {private String title;public void setTitle(String title) {this.title = title;}}parent.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><bean id="empServiceImpl" ><property name="name" ><value >dxl</value></property></bean> <!--继承了empServiceImpl中的name属性的setName()方法--><bean id="hourEmpServiceImpl" parent="empServiceImpl"><property name="hours"><value>20</value></property></bean><bean id="regularEmpServiceImpl" parent="empServiceImpl"><property name="name"><value>xiaoli</value></property><property name="title"><value>大二学生</value></property></bean></beans>HourEmpServiceImpl.java类与RegularEmpServiceImpl.java类继承了EmpServiceImpl.java类 运行hourEmpServiceImpl可以或得empServiceImpl类中 的name属性也有自己的hours属性;运行RegularEmpServiceImpl可以或得自己的属性即name=’xiaoli’ title=’大二学生’ 继承的父类中的name属性将被自己的name属性覆盖。
?