Java中的对象不一定是Spring IOC中的Bean,Spring IOC中的Bean一定是Java对象

Bean默认为Singleton(单例),Bean的创建与销毁都归由Spring IOC管理(prototype(原型/多例)除外)

一个对象转为Bean并由Spring IOC管理的过程如下,即一个Bean的生命周期如下

如图所示:

如果简单来讲,笼统概括的话就四步:

1.实例化

2.设置属性值

3.初始化

4.销毁

但是详细来说,会有很多细节需要注意,例如

1.第六步和第八七步之间会插入一个@PostConstruct方法

2.一个方式的多种实现,先后顺序的问题,如在bean销毁前的调用发放分为三种实现(注解,实现接口中的方法,xml中bean标签配置),三者的先后顺序为 注解 > 接口方法 > bean标签配置

代码示例:

Bean类:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component(value = "testBean")
public class TestBean implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean, DisposableBean {
    @Override
    public void setBeanName(String s) {
        System.out.println("设置bean的Id........");
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("管理我的beanFactory......");
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("高级容器接口:applicationContext.......");
    }

    @PostConstruct
    public void postConstructMethod(){
        System.out.println("postConstructMethod.......");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean的afterPropertiesSet方法.......");
    }

    @PreDestroy
    private void preDestroyMethod(){
        System.out.println("preDestroyMethod........");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("DisposableBean的destroy方法.........");
    }
BeanPostProcessor接口实现类:
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

@Component
public class MyBeanPostProcess implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if("testBean".equalsIgnoreCase(beanName)){
            System.out.println("MyBeanPostProcess--before方法.......");
        }

        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if("testBean".equalsIgnoreCase(beanName)){
            System.out.println("MyBeanPostProcess--after方法.......");
        }
        return bean;
    }
}

以上便是自己学习过程中的思想心得,欢迎各路大神前来指导讨论


版权声明:本文为qq_38114800原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_38114800/article/details/123612396