NOTE

2.44 Bean生命周期

1. 流程 - 对Bean进行实例化 - 将值和引用注入到Bean对应的属性中 - 通过Aware接口把Spring底层组件注入Bean - BeanPostProcessor。执行额外的逻辑。在InitializingBean的前后执行,会把当前正在创建的Bean传入 - Initializing

Java创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 流程

  • 对Bean进行实例化
  • 将值和引用注入到Bean对应的属性中
  • 通过Aware接口把Spring底层组件注入Bean
  • BeanPostProcessor。执行额外的逻辑。在InitializingBean的前后执行,会把当前正在创建的Bean传入
  • InitializingBean。执行额外的逻辑。但不会把正在创建的Bean传入
  • DisposableBean。销毁bean的时候调用destroy方法

2. 使用

总共有四种方式

2.1. @Bean注解指定init和destroy方法

public class BeanCycle
{
    public BeanCycle()
    {
        System.out.println("1.bean创建");
    }

    public void init()
    {
        System.out.println("2.bean初始化");
    }

    public void destroy()
    {
        System.out.println("3.bean销毁");
    }
}


@Bean(initMethod = "init", destroyMethod = "destroy")
public BeanCycle beanCycle()
{
    return new BeanCycle();
}

2.2. 实现InitializingBean, DisposableBean

@Component
@ComponentScan("com.zsk.context.bean")
public class BeanCycle2 implements InitializingBean, DisposableBean
{
    public BeanCycle2()
    {
        System.out.println("bean2创建");
    }


    @Override
    public void afterPropertiesSet() throws Exception
    {
        System.out.println("bean2属性设置完");

    }

    @Override
    public void destroy() throws Exception
    {
        System.out.println("bean2销毁");

    }
}

2.3. 在方法上修饰@PostConstruct, @PreDestroy

2.4. 实现BeanPostProcessor

@Component
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;
    }
}

3. 参考