ioc学习实验5-9

13 篇文章 0 订阅

实验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;
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值