Spring的bean的生命周期

发布于:2024-08-25 ⋅ 阅读:(82) ⋅ 点赞:(0)

文章目录

概要

在 Spring 框架中,bean 的生命周期包括从创建到销毁的整个过程。了解 bean 的生命周期有助于更好地管理 bean 的状态和依赖。下图是 Spring bean 生命周期的过程
在这里插入图片描述

代码演示

SpringConfig

@Configuration
@ComponentScan("com.example.hac.test")
public class SpringConfig {

}

MyBeanPostProcessor
BeanPostProcessor 允许在 Spring 容器初始化 bean 之前和之后进行自定义处理(自定义一些逻辑,eg:方法增强)

package com.example.hac.test;

// import ...

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (beanName.equals("user")) {
            System.out.println("postProcessBeforeInitialization方法执行了->user对象初始化方法前开始增强....");
        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (beanName.equals("user")) {
            System.out.println("postProcessAfterInitialization->user对象初始化方法后开始增强....");
        }
        return bean;
    }
}

User

package com.example.hac.test;

// import ...

@Component
public class User implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean {

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

    private String name;

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

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

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

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

    @PostConstruct
    public void init() {
        System.out.println("init方法执行了.................");
    }

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

    @PreDestroy
    public void destory() {
        System.out.println("destory方法执行了...............");
    }

}

main方法

package com.example.hac.test;

// import ...

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        User bean = context.getBean(User.class);
        System.out.println(bean);
    }
}

结果

执行main方法后结果如下:
在这里插入图片描述

User的构造方法执行了.........
setName方法执行了.........
setBeanName方法执行了.........
setBeanFactory方法执行了.........
setApplicationContext方法执行了........
postProcessBeforeInitialization方法执行了->user对象初始化方法前开始增强....
init方法执行了.................
afterPropertiesSet方法执行了........
postProcessAfterInitialization->user对象初始化方法后开始增强....
com.example.hac.test.User@651aed93

网站公告

今日签到

点亮在社区的每一天
去签到