Spring IoC 之 Bean的理解

Spring IoC 之 Bean 的理解

一、Spring IoC容器

1、IoC容器装载Bean工作流程

在这里插入图片描述

2、ApplicationContext、BeanFactory的区别

  1. Bean的初始实例化时间不同:在创建ApplicationContext实例时,Bean全部加载并且实例化;而BeanFactory则是在调用getBean()时实例化Bean;(ApplicationContext可以在BeanConfig.xml配置中使用lazy-init=“true”属性可以实现在调用时实例化Bean)
  2. 继承MessageSource,支持国际化消息
  3. 拥有上下文事件处理机制

二、Spring Bean的生命周期

Bean的初始化->Bean的使用->Bean的销毁,
对应处理方法方法为init()destroy()

在xml配置文件中设置属性init-method="init"destroy-method="destroy",实现处理方法在Bean的实现类中添加对应名字的方法即可

public void init(){
        System.out.println("Bean start ....");
    }
public void destroy(){
        System.out.println("Bean end...");
    }

在使用destroy-method属性时,应使用AbstractApplicationContext获取上下文并最后调用registerShutdownHook(),才能确保Bean的正常销毁

当多个Bean的init、destroy方法相同时可以在Beans标签中的default-init-method、default-destroy-method属性进行设置。

       default-init-method="defaultInit"
       default-destroy-method="defaultDestroy"

在java类中实现,并在xml中配置

public class DefaultLifeCircleMethod {
    public void defaultInit(){
        System.out.println("default init...");
    }
    public void defaultDestroy(){
        System.out.println("default destroy...");
    }
}

三、SpringBean的后置处理器(BeanPostProcessor)

在初始化Bean时对Bean的相关属性进行修正

使用:创建一个类InitDefaultTools实现BeanPostProcessor,并在xml配置文件中配置信息,只需要配置class即可

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

public class InitDefaultTools implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("BeforeInitialization : " + beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("AfterInitialization : " + beanName);
        return bean;
    }
}

postProcessBeforeInitialization(Object bean, String beanName)postProcessAfterInitialization(Object bean, String beanName)在初始化Bean时自动回调

四、Spring Bean的定义继承

与java类的继承不相同,在xml中声明继承

<bean id="parentBean" class="com.hgl.day01.ParentBean">
        <property name="message01" value="hello world!"/>
        <property name="message02" value="hello second world!"/>
</bean>

<bean id="childBean" class="com.hgl.day01.ChildBean" parent="abstractParent">
        <property name="message01" value="hello china!"/>
        <property name="message03" value="china first!"/>
</bean>

对childBean实例调用getMessage01、02、03,显示的结果为:

hello china!
hello second world!
china first!

childBean继承了parentBean的方法和属性

也可以使用抽象类作为父类

<bean id="abstractParent" abstract="true">
        <property name="message01" value="hello world!"/>
        <property name="message02" value="hello second world!"/>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值