Spring-3-bean的继承,作用域,工厂模式

bean 的继承

abstract: 创建一个模板bean, 通过继承实现bean配置信息的重用.
abstract=“true”, 这个bean是抽象的, 不能获取其实例, 只能被继承

	<bean id="person5" class="com.xian.bean.Person" abstract="true">
		<property name="name" value="zhangsan"></property>
		<property name="age" value="13"></property>
		<property name="gender" value="男"></property>
		<property name="email" value="zhangsan@qq.com"></property>

	</bean>
	<!-- parent:指定当前的bean的配置继承于那个 class可省 -->
	<bean id="person6" class="com.xian.bean.Person" parent="person5">
		<property name="name" value="李四"></property>
	</bean>

设置bean之间的依赖:depends-on

	<!-- 原来是按照配置的顺序创建bean -->	
	<!-- depends-on:定义bean之间的依赖 (只是改变创建顺序) -->
	<bean id="person" class="com.xian.bean.Person" depends-on="book,car"></bean>
	<bean id="car" class="com.xian.bean.Car"></bean>
	<bean id="book" class="com.xian.bean.Book"></bean>

bean的作用域:scope

singleton: 单实例的,默认
1),在容器启动完成之前就已经创建好对象, 保存在容器中
2),任何时候获取都是得到之前创建好的这个对象
prototype: 多实例的
1),容器启动时时,不会默认创建, 获取时才创建这个bean对象
2),每次获取都会创建一个新的实例对象
request: 在web环境下, 同一次请求创建一个bean实例
session: 在web环境下, 同一次回话创建一个bean实例

	<bean id="person" class="com.xian.bean.Book" scope="prototype"></bean>

使用工厂模式创建bean

静态工厂

工厂本身不用创建对象, 通过静态方法调用, 对象=工厂类.工厂方法名();

import com.xian.bean.Book;

public class BookStaticFactory {

	public static Book getBook(String bookName ) {
		System.out.println("static Factory");
		Book book = new Book();
		book.setBookName(bookName);
		book.setAuthor("xian");
		return book;
	}
	
}

	<!-- static Factory, 
		class:指定静态工厂全类名
	 	factory-method:指定工厂方法
	 	constructor-arg:可以为方法传参 -->
	<bean id="airPlane01" class="com.xian.factory.AirPlaneStaticFactory"
		factory-method="getAirPlane" >
		<constructor-arg value="lisi"></constructor-arg>
	</bean>
实例工厂

工厂需要创建对象: 再用该对象创建实例

import com.xian.bean.Book;

public class BookInstanceFactory {

	public Book getBook(String bookName ) {
		System.out.println("Instance Factory");
		Book book = new Book();
		book.setBookName(bookName);
		book.setAuthor("xian");
		return book;
	}
	
}
	<!-- 实例工厂  -->
	<bean id="bookInstanceFactory" class="com.xian.factory.BookInstanceFactory"	>
	</bean>
	<!-- factory-bean: 指定当前对象创建使用哪个工厂   factory-method:指定工厂方法-->
	<bean id="book2" class="com.xian.bean.Book"
	factory-bean="bookInstanceFactory" factory-method="getBook">
		<constructor-arg value="Spring"></constructor-arg>
	</bean>
实现FactoryBean接口
import com.xian.bean.Book;

public class BookFactoryImpl implements FactoryBean<Book> {

	
	/**
	 *返回创建的对象
	 */
	@Override
	public Book getObject() throws Exception {
		Book book = new Book();
		return book;
	}

	/**
	 *返回创建对象的类型
	 *Spring会自动调用这个方法来确认创建对象的是什么类型
	 */
	@Override
	public Class<Book> getObjectType() {
		
		return null;
	}

	/**
	 * 配置是否为单例, 默认TRUE
	 */
	@Override
	public boolean isSingleton() {
		// TODO Auto-generated method stub
		return FactoryBean.super.isSingleton();
	}
}

	<!-- FactoryBean(Spring接口), 只要是这个接口的实现类, Spring都认为是一个工厂;
		 1. ioc容器启动的时候不会创建实例
		 2. FacTory 获取的时候才会创建对象(实例对象)-->
	<bean id="bookFactoryImpl" class="com.xian.factory.BookFactoryImpl">
	</bean>

Book类


public class Book {


	private String bookName;
	private String author;
	public Book() {

		System.out.println("Book被创建");
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	@Override
	public String toString() {
		return "Book [bookName=" + bookName + ", author=" + author + "]";
	}
	
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值