depend-on、延迟初始化Bean、 Bean定义的继承
depend-on
案例: StudentServiceImpl.java public 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的属性值匹配的bean 2、你也可以吧teacherServiceImpl所以依赖的bean都放在teacherService之前并且scope是singleton模式即可 备注: 只使用第一种方式即可。 --> <bean id="studentServiceImpl" class="cn.csdn.service.StudentServiceImpl" scope=" singleton "/> <bean id="teacherServiceImpl" class="cn.csdn.service.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的使用方法
Bean定义的继承
案例: EmpServiceImpl.java public class EmpServiceImpl { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } HourEmpServiceImpl.java public class HourEmpServiceImpl extends EmpServiceImpl{ private Integer hours; public void setHours(Integer hours) { this.hours = hours; } } RegularEmpServiceImpl.java public 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" class="cn.csdn.service.EmpServiceImpl" scope="singleton" > <property name="name" > <value >dxl</value> </property> </bean> <!--继承了empServiceImpl中的name属性的setName()方法--> <bean id="hourEmpServiceImpl" class="cn.csdn.service.HourEmpServiceImpl" scope="singleton" parent="empServiceImpl"> <property name="hours"> <value>20</value> </property> </bean> <bean id="regularEmpServiceImpl" class="cn.csdn.service.RegularEmpServiceImpl" scope="singleton" 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属性覆盖。
延迟初始化Bean在体验spring(三)中已有补充