Java框架必会!!!SpringIOC实验(9-11)继续跟进中~~~

2 篇文章 0 订阅
2 篇文章 0 订阅

实验9:测试bean的作用域,分别创建单实例和多实例的bean★

bean的作用域:指定bean是否单实例,xxx;默认:单实例的
prototype:多实例的:

  1. 容器启动默认不会去创建多实例bean
  2. 获取的时候创建这个bean
  3. 每次获取都会创建一个新的对象
    singleton:单实例的;默认的;
  4. 在容器启动完成之前就已经创建好对象,保存在容器中了。
  5. 任何获取都是获取之前创建好的那个对象;

request:在web环境下,同一次请求创建一个Bean实例(没用)
session:在web环境下,同一次会话创建一个Bean实例(没用)

在Book的无参构造方法中添加输出语句便于观察容器启动时bean是否被创建

public Book() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("book被创建。。。");
	}

xml配置

<!-- 实验9:测试bean的作用域,分别创建单实例和多实例的bean★ -->
	<!-- scope="prototype":设置该实例为多实例 -->
	<bean id="book01" class="com.zxy.bean.Book" scope="prototype">
		<property name="author" value="吴承恩"></property>
		<property name="bookName" value="西游记"></property>
	</bean>

测试结果
在这里插入图片描述
运行测试程序控制台可看出在xml中注册的多实例Book没有被创建,符合预期结果
将bean的scope属性改为singleton(单实例),测试运行结果。

<bean id="book02" class="com.zxy.bean.Book" scope="singleton">
		<property name="author" value="吴承恩"></property>
		<property name="bookName" value="西游记"></property>
</bean>

结果显示当运行测试程序时即使没有获取实例bean他也会被创建。
在这里插入图片描述

实验10:创建带有生命周期方法的bean

生命周期:bean的创建到销毁;
ioc容器中注册的bean;

  1. 单例bean,容器启动的时候就会创建好,容器关闭也会销毁创建的bean
  2. 多实例bean,获取的时候才创建;
    我们可以为bean自定义一些生命周期方法;spring在创建或者销毁的时候就会调用指定的方法;
    自定义初始化方法和销毁方法; The method must have no arguments,but may throw any exception
    首先在Book的bean方法中添加自定义的无返回值的spring在创建或者销毁的时候需要调用的方法;
public class Book {	
	private String bookName;
	private String author;	
	public void myInit(){
		System.out.println("这是图书的初始化方法...");
	}
	public void myDestory(){
		System.out.println("这是图书的销毁方法...");
	}
	public Book() {
		super();
		System.out.println("book被创建。。。");
	}
	//getter/setter代码省略
}

xml配置

<!-- 
		init-method="myInit":指定spring在创建时调用哪个方法
		destroy-method="myDestory":指定spring在销毁时调用哪个方法
	-->
	<bean id="book03" class="com.zxy.bean.Book"
		init-method="myInit" destroy-method="myDestory">
		<property name="author" value="吴承恩"></property>
		<property name="bookName" value="西游记"></property>	
	</bean>

测试结果
在这里插入图片描述

实验11:测试bean的后置处理器:BeanPostProcessor(继承该接口)

package com.zxy.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanPostProcessor implements BeanPostProcessor {

	/**
	 * postProcessBeforeInitialization: 初始化之前调用
	 * Object bean:将要初始化的bean
	 */
	public Object postProcessBeforeInitialization(Object bean, String beanName)
			throws BeansException {
		// TODO Auto-generated method stub
		System.out.println("postProcessBeforeInitialization...【" + beanName
				+ "】bean将要调用初始化方法了....这个bean是这样:【" + bean + "】");
		// 返回传入的bean
		return bean;
	}
	/**
	 * postProcessAfterInitialization: 初始化方法之后调用
	 * Object bean, String beanName:bean在xml中配置的id
	 */
	public Object postProcessAfterInitialization(Object bean, String beanName)
			throws BeansException {
		// TODO Auto-generated method stub
		System.out.println("postProcessAfterInitialization...【" + beanName
				+ "】bean初始化方法调用完了...AfterInitialization..");
		// 初始化之后返回的bean;返回的是什么,容器中保存的就是什么
		return bean;
	}
}

引入自定义的BeanPostProcessor可以在创建之前获取到bean对象,所以可以在这里做一些处理。
xml配置信息只需添加一句

<!-- beanPostProcessor:将该自定义类注册入容器 -->
<bean id="beanPostProcessor" class="com.zxy.bean.MyBeanPostProcessor"></bean>

测试结果
在这里插入图片描述
今天结束!!!
陌生人加油!!!
下次见~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值