Spring容器中Bean

一.Bean的作用域

  • singleton:在spring ioc中仅存在一个实例对象,bean以单例形式存在。
  • prototype:每次调用getBeans()时都会返回一个新的实例。
  • request:每次Http请求都会创建一个新的bean。
  • session:同一个Http session共享一个bean。

二.Bean的生命周期

在这里插入图片描述

  1. instantiate bean对象实例化
  2. populate properties属性封装
  3. Bean执行setBeanName()方法
  4. Bean设置工厂setBeanFactory()或者上下文对象
  5. 执行postProcessBeforeInitialization(Bean初始化之前执行)
  6. Bean执行afterPropertiesSet()
  7. 调用指定的初始化方法<bean init-method=" "/>
  8. 执行业务逻辑
  9. 执行DisposableBean执行destory
  10. 调用指定的销毁方法<bean destory-method=" ">
package com.ibuyi.free.Case_one;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;

public class Man implements BeanNameAware, BeanFactoryAware, InitializingBean, DisposableBean {
    private String name;

    public Man(){
        System.out.println("第一步:实例化对象");
    }

    public void setName(String name) {
        System.out.println("第二步:设置对象属性");
        this.name = name;
    }
    public void eat(){
    //就是man对象自己有的方法
        System.out.println("第九步:执行业务方法");
    }
    public void init(){
        System.out.println("第七步:自定义初始化方法");
    }

    @Override
    public void setBeanName(String s) {
    //在配置文件中指定的init-method
        System.out.println("第三步:设置Bean对象的名称");
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("第四步:设置工厂");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("第六步:属性设置后");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("第十步:执行销毁方法");
    }
}

package com.ibuyi.free.Case_one;

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

public class MyBeanPostProcessor implements BeanPostProcessor {
    //这里任何对象完成实例化都会经过这个流程。
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        //在对象初始化之前进行的操作,可以在这里进行反向代理
        System.out.println("第五步:初始化前执行");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    //初始化完成后执行的操作
        System.out.println("第八步:初始化后执行");
        return bean;
    }
}

在这里插入图片描述

原文地址:https://www.cnblogs.com/hzcya1995/p/13309420.html