Spring中的Bean配置 (14)——IOC容器中Bean的生命周期

在这里插入图片描述
Spring中的Bean配置 (1)——内容提要
Spring中的Bean配置 (2)—— IOC和DI
Spring中的Bean配置 (3)——在Spring的IOC容器里配置Bean(通过全类名(反射))——基于XML文件的方式
Spring中的Bean配置 (4)——依赖注入方式
Spring中的Bean配置 (5)——字面值
Spring中的Bean配置 (6)——引用其他Bean
Spring中的Bean配置 (7)——注入参数详解:null值和级联属性
Spring中的Bean配置 (8)—— 集合属性
Spring中的Bean配置 (9)—— XML 配置里的 Bean自动装配
Spring中的Bean配置 (10)—— 继承 Bean 配置和依赖 Bean 配置
Spring中的Bean配置 (11)——Bean的作用域
Spring中的Bean配置 (12)——使用外部属性文件
Spring中的Bean配置 (13)—— Spring表达式语言:SpEl
Spring中的Bean配置 (14)——IOC容器中Bean的生命周期
Spring中的Bean配置 (15)——在Spring的IOC容器里配置Bean(通过工厂方法创建Bean)——基于XML文件的方式
Spring中的Bean配置 (16)——在Spring的IOC容器里配置Bean(通过FactoryBean)——基于XML文件的方式

Spring中的Bean配置 (17)——在Spring的IOC容器里配置Bean——基于注解的方式来配置Bean

  • Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务.
  • Spring IOC 容器对 Bean 的生命周期进行管理的过程:

—通过构造器或工厂方法创建 Bean 实例

—为 Bean 的属性设置值和对其他 Bean 的引用

调用 Bean 的初始化方法

—Bean 可以使用了

当容器关闭时,调用 Bean 的销毁方法

  • 在 Bean 的声明里设置 init-method 和 destroy-method 属性,为 Bean 指定初始化和销毁方法.

我么还可以创建Bean 后置处理器允许在调用初始化方法前后对Bean进行额外的处理。

  • Bean 后置处理器对 IOC 容器里的所有 Bean 实例逐一处理, 而非单一实例. 其典型应用是: 检查 Bean 属性的正确性或根据特定的标准更改 Bean 的属性.

  • 对Bean 后置处理器而言, 需要实现 在这里插入图片描述

  • 在初始化方法被调用前后, Spring 将把每个 Bean 实例分别传递给上述接口的以下两个方法:

在这里插入图片描述

添加 Bean 后置处理器后Bean的生命周期如下

  • Spring IOC 容器对 Bean 的生命周期进行管理的过程:

—通过构造器或工厂方法创建 Bean 实例

—为 Bean 的属性设置值和对其他 Bean 的引用

Bean 实例传递给 Bean 后置处理器的 postProcessBeforeInitialization 方法

—调用 Bean 的初始化方法

Bean 实例传递给 Bean 后置处理器的 postProcessAfterInitialization方法

—Bean 可以使用了

—当容器关闭时, 调用 Bean 的销毁方法

下面进行代码演示

Person.java

package com.atguigu.spring.bean;

public class Person {
	
	private String name;

	public void inits() {
		
		System.out.println("初始化");
		
	}
	
	public void destroys() {
		
		System.out.println("销毁");
		
	}

	public Person(String name) {
		
		super();
		this.name = name;
		System.out.println("调用构造函数");
		
	}
	
	public   Person() {
		
		
	}
		
	@Override
	public String toString() {
		
		return "Person [name=" + name + "]";
		
	}

}

Person_ImplementsBeanPostProcessor .java

package com.atguigu.spring.bean;

import org.springframework.beans.factory.config.BeanPostProcessor;

public class Person_ImplementsBeanPostProcessor  implements BeanPostProcessor   {
	
	public Object postProcessAfterInitialization(Object bean ,String beanName) {
		
		System.out.println("postProcessAfterInitialization"+bean+","+beanName);
		
		return bean;
		
	}
	
  public Object postProcessBeforeInitialization(Object bean ,String beanName) {
	  
		System.out.println("postProcessBeforeInitialization"+bean+","+beanName);

		return bean;
		
	}

}

application.java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="person1" class="com.atguigu.spring.bean.Person" init-method="inits" destroy-method="destroys">
<constructor-arg value="zlj"></constructor-arg>
</bean>

<!-- 配置bean的后置处理器:不需要id,IOC容器自动识别是一个BeanPostProcessor -->
 <bean class="com.atguigu.spring.bean.Person_ImplementsBeanPostProcessor"></bean>
 
</beans>

Main.java

package com.atguigu.spring.bean;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

	public static void main(String[] args) throws IOException{

		ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
		
		Person person=applicationContext.getBean(Person.class);
		
	   System.out.println(person);
		
		applicationContext.close();
		
	}

}

结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值