实验6:通过继承实现bean配置信息的重用 实验7:通过abstract属性创建一个模板bean
<!-- person05是专门的继承bean,不能正常获取实例
org.springframework.beans.factory.BeanIsAbstractException:
Error creating bean with name 'person05': Bean definition is abstract
-->
<bean id="person05" class="com.yj.bean.person" abstract="true">
<property name="lastName" value="新张三"></property>
<property name="age" value="18"></property>
<property name="gender" value="新男"></property>
<property name="email" value="新邮箱"></property>
</bean>
<!-- parent=""指定当前的bean的配置信息继承于哪个bean -->
<bean id="person06" class="com.yj.bean.person" parent="person05">
<property name="lastName" value="子类的姓名"></property>
</bean>
实验8:bean之间的依赖
<!-- 按照配置的顺序创建bean的 -->
<!-- 改变bean的创建顺序:实验8:bean之间的依赖,只是改变创建顺序 -->
<bean id="person" class="com.yj.bean.person" depends-on="car,book"></bean>
<bean id="car" class="com.yj.bean.car"></bean>
<bean id="book" class="com.yj.bean.Book"></bean>
实验9:测试bean的作用域,分别创建单实例和多实例的bean★
<!--
bean的作用域,指定bean是否单实例,默认单实例
prototype:多实例
1)容器启动默认不去创建多实例bean,获取的时候创建
2)每次实例化都会创建一个新的对象
singleton:单实例,默认的
1)在容器启动完成之前就已经创建好对象,保存在容器中了
2)因为是单例,所以在同个ioc中每次实例化的都是同一个对象
request:在web环境下,同一次请求创建一个bean实例(没用)
session:在web环境下,从一次会话创建一个bean(没用)
-->
<bean id="book1" class="com.yj.bean.Book" scope="prototype"></bean>
实验5:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、FactoryBean★
<!-- 实验5:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、FactoryBean★ -->
<!-- bean的创建默认就是框架利用反射new出来的bean实例 -->
<!-- 工厂模式,工厂帮我们创建对象,有一个专门创建对象的类,这个类就是工厂 AirPlane ap = AirPlaneFactory.getAirPlane(String jzName);
静态工厂:工厂本身不用创建对象;通过静态方法调用,对象 = 工厂类.方法名()
实例工厂:工厂要创建对象,工厂类 工厂对象 = new 工厂类(); 工厂对象.getAirPlane(String jzName); -->
<!-- 静态工厂(不需要创建工厂本身) class:指定静态工厂全类名 factory-method:指定工厂方法 constructor-arg:为方法传参 -->
<bean id="airPlane01" class="com.yj.factory.AirPlaneStaticFactory"
factory-method="getAirPlane">
<!-- 可以为方法指定参数 -->
<constructor-arg value="李四"></constructor-arg>
</bean>
<!-- 实例工厂使用 -->
<bean id="AirPlaneInstanceFactory" class="com.yj.factory.AirPlaneInstanceFactory">
</bean>
<!-- factoryBean指定当前对象创建使用哪个工厂 1.向配置除实例工厂对象 2.配置我们要创建的airplane对象使用哪个工厂创建
factory-bean:指定工厂实例 factory-method:指定工厂方法 -->
<bean id="airPlane02" class="com.yj.bean.AirPlane" factory-bean="AirPlaneInstanceFactory"
factory-method="getAirPlane">
<constructor-arg value="王五"></constructor-arg>
</bean>
<!-- FactoryBean(是Spring规定的一个接口)只要是这个接口的实现类,Spring都认为是一个工厂
1.ioc容器启动时不创建实例
2.FactoryBean获取的时候才创建对象
-->
<bean id="MyFactoryBeanImpl" class="com.yj.factory.MyFactoryBeanImpl"></bean>
实例工厂
package com.yj.factory;
import com.yj.bean.AirPlane;
/**
* 实例工厂
* @author Administrator
*
*/
public class AirPlaneInstanceFactory {
//new AirPlaneInstanceFactory.getAirPlane();
public AirPlane getAirPlane(String jzName){
System.out.println("实例工厂在造飞机");
AirPlane airPlane = new AirPlane();
airPlane.setFdj("太行");
airPlane.setFjsName("副驾驶");
airPlane.setJzName(jzName);
airPlane.setPersonNum(300);
airPlane.setYc("198.98m");
return airPlane;
}
}
静态工厂
package com.yj.factory;
import com.yj.bean.AirPlane;
/**
* 静态工厂
* @author Administrator
*
*/
public class AirPlaneStaticFactory {
public static AirPlane getAirPlane(String jzName){
System.out.println("静态工厂在造飞机");
AirPlane airPlane = new AirPlane();
airPlane.setFdj("太行");
airPlane.setFjsName("副驾驶");
airPlane.setJzName(jzName);
airPlane.setPersonNum(300);
airPlane.setYc("198.98m");
return airPlane;
}
}
FactoryBean接口
package com.yj.factory;
import java.util.UUID;
import org.springframework.beans.factory.FactoryBean;
import com.yj.bean.Book;
/**
* 只要是这个接口的实现类,Spring都认为是一个工厂
* Spring会自动调用工厂方法创建实例
* @author Administrator
*
*1.编写一个FactortyBean的实现类
*2.在Sping配置文件中注册
*/
public class MyFactoryBeanImpl implements FactoryBean<Book>{
//getObject()工厂方法:
//返回创建的对象
@Override
public Book getObject() throws Exception {
// TODO Auto-generated method stub
System.out.println("MyFactoryBean创建对象");
Book book = new Book();
book.setAuthor("阿萨");
book.setBookName(UUID.randomUUID().toString());
return book;
}
/**
* 返回创建的对象的类型
* Spring自动调用方法,来确认创建的对象是什么类型
*/
@Override
public Class<?> getObjectType() {
// TODO Auto-generated method stub
return Book.class;
}
/**
* isSingleton 是单例吗
*/
@Override
public boolean isSingleton() {
// TODO Auto-generated method stub
return false;
}
}