jiujie395 2014-06-06 07:04 采纳率: 0%
浏览 1309

Spring ApplicationContext Bean的生命周期是怎么样的?

spring 3.x企业应用开发实践一书中写道:
ApplicationContext的初始化和BeanFactory有一个重大的区别:BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有单实例的Bean。
但是在介绍ApplicationContext Bean的生命周期时,配图如下:
CSDN移动问答

上图写着:在通过getBean()调用某一个Bean之后 才实例化,这不是自相矛盾么?求解,到底ApplicationContext Bean的生命周期是怎么样的。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 04:34
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    ApplicationContext Bean的生命周期是这样的:

    1. Spring容器启动后,它会自动加载并初始化所有的Bean。
    2. 当应用程序开始运行时,ApplicationContext Bean就会被创建。它将包含所有注册到BeanFactory中的Bean及其配置信息。
    3. 当用户试图获取或使用一个Bean时,ApplicationContext Bean会被实例化并返回给用户。如果这个Bean还没有被其他地方使用过,则ApplicationContext Bean也会被销毁。
    4. 如果用户再次尝试获取同一个Bean,那么ApplicationContext Bean将会再次被实例化。这称为"单例"模式(Singleton)。
    5. ApplicationContext Bean的生命周期结束时,它会调用其onDestroy方法来处理任何清理工作。例如,它可以释放资源或者关闭数据库连接等。

    以下是一个简单的例子,展示了如何在Java中实现一个ApplicationContext Bean:

    public class MyApplicationContext extends AbstractApplicationContext {
    
        public MyApplicationContext(ClassLoader loader) {
            super(loader);
        }
    
        @Override
        protected Object getBean(String name, Class<?> requiredType) throws BeansException {
            // 实现逻辑以确保每个bean都是唯一的
            return null;
        }
    }
    

    在这个例子中,我们定义了一个名为MyApplicationContext的类,它是AbstractApplicationContext的子类。我们在构造函数中传入了ClassLoader对象。然后,在getBean方法中实现了逻辑,确保每个Bean都是唯一的。

    评论

报告相同问题?