该博客参考雷神的印象笔记,用来巩固复习 ====================工厂方式创建bean========== 实验6:通过继承实现bean配置信息的重用(测试) 实验7:通过abstract属性创建一个模板bean 实验8:bean之间的依赖 实验9:测试bean的作用域,分别创建单实例和多实例的bean★(测试) 实验5:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、(FactoryBean测试)★实验6: 实验6:通过继承实现bean配置信息的重用(测试)
<bean id="person05" class="com.atguigu.bean.Person" >
<property name="lastName" value="张三"></property>
<property name="age" value="18"></property>
<property name="gender" value="男"></property>
<property name="email" value="zhangsan@atguigu.com"></property>
</bean>
<!--parent:指定当前bean的配置信息继承于哪个 但不是真正的父子类 -->
<!--需要改变的就写在<property></property>里面,不需要改变就直接拿person05-->
<bean id="person06" class="com.atguigu.bean.Person" parent="person05">
<property name="lastName" value="李四"></property>
</bean>
实验7:通过abstract属性创建一个模板bean
<!-- abstract="true":这个bean的配置是一个抽象的,不能获取他的实例,只能被别人用来继承 -->
<bean id="person05" class="com.atguigu.bean.Person" abstract="true">
<property name="lastName" value="张三"></property>
<property name="age" value="18"></property>
<property name="gender" value="男"></property>
<property name="email" value="zhangsan@atguigu.com"></property>
</bean>
<!--parent:指定当前bean的配置信息继承于哪个 但不是真正的父子类 -->
<!--需要改变的就写在<property></property>里面,不需要改变就直接拿person05-->
<bean id="person06" class="com.atguigu.bean.Person" parent="person05">
<property name="lastName" value="李四"></property>
</bean>
实验8:bean之间的依赖
<!-- 原来是按照配置的顺序-就是👇写的顺序,创建bean -->
<!--实验8:bean之间的依赖(只是改变创建顺序)改变bean的创建顺序 depends-on -->
<bean id="car" class="com.atguigu.bean.Car" depends-on="person,book"></bean>
<bean id="person" class="com.atguigu.bean.Person"></bean>
<bean id="book" class="com.atguigu.bean.Book"></bean>
实验9:测试bean的作用域,分别创建单实例和多实例的bean
<!-- 实验9:测试bean的作用域,分别创建单实例和多实例的bean★
bean的作用域:指定bean是否单实例,xxx;默认:单实例的
prototype:多实例的;
1)、容器启动默认不会去创建多实例bean
2)、获取的时候创建这个bean
3)、每次获取都会创建一个新的对象
singleton:单实例的;默认的;
1)、在容器启动完成之前就已经创建好对象,保存在容器中了。
2)、任何获取都是获取之前创建好的那个对象;
request:在web环境下,同一次请求创建一个Bean实例(没用)
session:在web环境下,同一次会话创建一个Bean实例(没用)
-->
<bean id="book" class="com.atguigu.bean.Book" scope="prototype"></bean>
实验5:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、(FactoryBean测试)★
<!--实验5:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、FactoryBean★ -->
<!-- bean的创建默认就是框架利用反射new出来的bean实例 -->
<!-- 工厂模式;工厂帮我们创建对象;有一个专门帮我们创建对象的类,这个类就是工厂
AirPlane ap = AirPlaneFactory.getAirPlane(String jzName);
静态工厂:工厂本身不用创建对象;通过静态方法调用,对象 = 工厂类.工厂方法名();
AirPlaneStaticFactory.getAirPlane()
实例工厂:工厂本身需要创建对象;
工厂类 工厂对象 = new 工厂类();
工厂对象.getAirPlane("张三");
new AirPlaneInstanceFactory().getAirPlane()
-->
<!-- 1、静态工厂(不需要创建工厂本身)factory-method="getAirPlane":
指定哪个方法是工厂方法
class:指定静态工厂全类名
factory-method:指定工厂方法
constructor-arg:可以为方法传参
-->
<!--2、实例工厂使用
factory-method;指定这个实例工厂中哪个方法是工厂方法;
-->
<!--------------------- -->
<!-- 1、静态工厂 -->
<bean id="airPlane01" class="com.atguigu.factory.AirPlaneStaticFactory"
factory-method="getAirPlane">
<!-- 可以为方法指定参数 -->
<constructor-arg value="李四"></constructor-arg>
</bean>
<!--2、实例工厂使用 -->
<bean id="airPlaneInstanceFactory"
class="com.atguigu.factory.AirPlaneInstanceFactory"></bean>
<bean id="airPlane02" class="com.atguigu.bean.AirPlane"
factory-bean="airPlaneInstanceFactory"
factory-method="getAirPlane">
<constructor-arg value="王五"></constructor-arg>
</bean>
<!-- FactoryBean★(是Spring规定的一个接口);
只要是这个接口的实现类,Spring都认为是一个工厂;
创建了MyFactoryBeanImple.java(实现FactoryBean接口类是Spring可以认识的工厂类,
Spring会自动调用工厂方法创建实例 工厂方法:getObject()、getObjectType()返回创建对象类型、isSingleton()是否是单例
Spring如何知道调用这个工厂创建book对象? 1、编写一个 FactoryBean的实现类 2、在Spring配置文件中注册)
1、ioc容器启动的时候不会创建实例
2、FactoryBean;获取的时候的才创建对象
-->
<bean id="myFactoryBeanImple"
class="com.atguigu.factory.MyFactoryBeanImple"></bean>
</beans>