Spring生命周期

Spring生命周期

BeanDefinition:

生命周期流程

  1. 通过BeanDefinition获取bean的定义信息

  2. 通过构造函数实例化bean

  3. bean的依赖注入

  4. 处理Aware接口(BeanNameAware,BeanFactoryAware,ApplicationContextAware)

  5. Bean的后置处理器BeanPostProcessor-前置

  6. 初始化方法(initializingBean、init-method)

  7. Bean的后置处理器BeanPostProcessor-后置

  8. 销毁bean

具体样例:

Bean类

public class BeanLife implements BeanNameAware, ApplicationContextAware, BeanFactoryAware, InitializingBean {

    public BeanLife(){
        System.out.println("构造方法执行");
    }

    private String name;

    @Value("张三")
    public void setName(String name){
        System.out.println("setName方法执行了");
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("setBeanFactory方法执行了");
    }

    @Override
    public void setBeanName(String s) {
        System.out.println("setBeanName方法执行了");
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("setApplicationContext方法执行了");
    }

    /**
     * initializingBean接口
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet方法执行了");
    }

    @PostConstruct
    public void init(){
        System.out.println("自定义init方法");
    }

    @PreDestroy
    public void preDestroy(){
        System.out.println("销毁前执行:PreDestroy方法执行");
    }
}

后置处理器类:CGLIB生成代理对象

package com.example.demo.LifeCycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.InvocationHandler;

import java.lang.reflect.Method;

/**
 * @fileName: BeanPostProcessorT
 * @author: 四面神
 * @createTime:2023/11/26 17:33
 * 描述:
 */
public class BeanPostProcessorT implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("对象初始化前置开始加强");
        return null;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("对象初始化后置加强");
        //CGLIB代理对象
        Enhancer enhancer = new Enhancer();
        //设置需要增强的类
        enhancer.setSuperclass(bean.getClass());
        enhancer.setCallback(new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                return method.invoke(method,objects);
            }
        });
        return enhancer.create();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值