springbean的生命周期_spring bean生命周期(涵盖spring常用接口的载入)

本文通过一个详细的示例,展示了Spring Bean的生命周期,包括InitializingBean接口、各种Aware接口的使用,以及BeanPostProcessor和BeanFactoryPostProcessor的实现。在示例中,UserB类实现了多个接口并展示了其在生命周期中的回调方法。启动类和运行结果进一步说明了Spring Bean的初始化和后处理过程。

spring bean生命周期流程图:

1503ad73dd830d4d6137ccb20ad199d7.gif

78ca0ac2eca7434829828b8128f16f86.png
f90769b5774925fd3c169ee55dbe1400.gif

​​​

其中包含了很多常用的接口,可以参考spring 常用接口;

下面写个例子证明下:

1.实现InitializingBean以及各个Aware接口

public class UserB implements InitializingBean , BeanFactoryAware , BeanNameAware, BeanClassLoaderAware , ApplicationContextAware, EnvironmentAware, ResourceLoaderAware, MessageSourceAware {    private String name;    private int age;    private UserA usera;    @Autowired    public void setUsera(UserA usera) {        this.usera = usera;        System.out.println("====UserB属性注入usera"+usera);    }    public UserB() {        System.out.println("====构造userB");    }    public String getName() {        return "程序猿";    }    public int getAge() {        return 19;    }    public void function(){        System.out.println("====userB"+usera.getName());    }    @Override    public String toString() {        return "UserB{" +                "name='" + getName() + ''' +                ", age=" + getAge() +                ", usera=" + usera +                '}';    }    @Override    public void afterPropertiesSet() throws Exception {        System.out.println("UserB===InitializingBean-afterPropertiesSet");    }    @Override    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {        System.out.println("=====UserB:setBeanFactory");    }    @Override    public void setBeanClassLoader(ClassLoader classLoader) {        System.out.println("=====UserB:setBeanClassLoader");    }    @Override    public void setBeanName(String name) {        System.out.println("=====UserB:setBeanName");    }    @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        System.out.println("=====UserB:setApplicationContext");    }    @Override    public void setEnvironment(Environment environment) {        System.out.println("=====UserB:setEnvironment");    }    @Override    public void setMessageSource(MessageSource messageSource) {        System.out.println("=====UserB:setMessageSource");    }    @Override    public void setResourceLoader(ResourceLoader resourceLoader) {        System.out.println("=====UserB:setResourceLoader");    }}
1503ad73dd830d4d6137ccb20ad199d7.gif

2.实现BeanPostProcessor, BeanFactoryPostProcessor , InstantiationAwareBeanPostProcessor

@Componentpublic class UserPostProcessor implements BeanPostProcessor, BeanFactoryPostProcessor , BeanFactoryAware , InstantiationAwareBeanPostProcessor {    BeanFactory beanFactory;    @Override    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {        if(beanName.contains("UserB")) {            Object bean1 = beanFactory.getBean(UserB.class.getName());            System.out.println("====BeanPostProcessor-postProcessBeforeInitialization:"+bean1);        }        return null;    }    @Override    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {        if(beanName.contains("UserB")) {            Object bean1 = beanFactory.getBean(UserB.class.getName());            System.out.println("====BeanPostProcessor-postProcessAfterInitialization:"+bean1);        }        return null;    }    @Override    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {        BeanDefinition beanDefinition = beanFactory.getBeanDefinition(UserB.class.getName());        System.out.println("=====BeanFactoryPostProcessor-postProcessBeanFactory:"+beanDefinition);    }    @Override    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {        this.beanFactory = beanFactory;    }    @Override    public Object postProcessBeforeInstantiation(Class> beanClass, String beanName) throws BeansException {        if(beanName.contains("UserB")) {            System.out.println("=====InstantiationAwareBeanPostProcessor-postProcessBeforeInstantiation:" + beanName);        }        return null;    }    @Override    public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {        if(beanName.contains("UserB")) {            Object bean1 = beanFactory.getBean(UserB.class.getName());            System.out.println("=====InstantiationAwareBeanPostProcessor-postProcessAfterInstantiation" + bean1);        }        return true;    }    @Override    public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) throws BeansException {        if(beanName.contains("UserB")) {            Object bean1 = beanFactory.getBean(UserB.class.getName());            System.out.println("=====InstantiationAwareBeanPostProcessor-postProcessProperties:" + bean1);        }        return null;    }}
1503ad73dd830d4d6137ccb20ad199d7.gif

3.启动类;

@SpringBootApplication@Import({UserB.class,UserA.class})public class DemoApplication {public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(DemoApplication.class, args);}}
1503ad73dd830d4d6137ccb20ad199d7.gif

4.运行结果:

57c166f63aec25d5e45c3d2478f4f415.png
1503ad73dd830d4d6137ccb20ad199d7.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值