【spring核心】BeanFactory 和 ApplicationContext

这个系列 【spring核心】 分享一些spring核心的知识点和实践,主要是IOC和AOP
现在框架越来越先进了 特别是springboot出现之后,很多底层的东西框架都帮我们做了,
导致我们只能感知到表面的一些东西,用起来是很爽,但是用完之后我们还是要尝试学习一下底层的东西,这样可以让我们更深入的理解和体会

IOC容器管理Bean

所谓的bean 就是spring 的核心 IOC容器中,所管理的对象。
这些对象在我们配置(比如xml配置 比如类上面加注解配置等等)之后
在spring启动的时候 spring容器会把他们加载到IOC容器中
方便我们去调用 去使用他们。

在这里插入图片描述
那么问题来了 spring是怎么根据我们的配置 创建出这些bean的?
来代替我们自己new这个对象呢?

这里要说一个它的核心概念 就是

BeanFactory

看名字就很好理解 bean工厂? 就是生产bean的地方,我的博客还是按 照顾新手 的原则。
我们先来一个最原始 最复古的方法:

首先你有一个接口和接口实现方法 : UserInter UserInterImpl

我们自己创建一个 xml配置 把bean配置好:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

        <bean id="UserInter" class="com.example.srpingcorerush.ioc.TestClass.test1.UserInterImpl"></bean>
</beans>

这里新手要注意 把接口作为bean id的命名是一个好习惯

我们创建一个bean工厂对象 然后创建一个xml读取器 去扫描xml文件中bean配置

    @Test
    public void TestBeanFactory(){
        //创建一个bean工厂
        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();

        //创建一个xml读取器
        XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);

        //读取这个xml文件
        reader.loadBeanDefinitions("ioc-beans.xml");

        UserInter userInter = (UserInter)factory.getBean("UserInter");

        System.out.println("获取bean工厂中创建的bean"+userInter);

    }

这样我们就可以bean工厂中获取到bean了

获取bean工厂中创建的beancom.example.srpingcorerush.ioc.TestClass.test1.UserInterImpl@1a1d6a08

我们平时习惯用注解来创建bean 然后用注解来获取bean,其实这些简便做法的底层就是这样来的。


其实beanfactory是一种比较原始 比较复古的底层手段 来创建和获取bean。

你可以把它称为一个容器 。 而在它基础上

Spring 就把它进行了一层封装 ,在他的基础上 搞一个更强大的spring容器:

ApplicationContext

(spring就喜欢干这种事情 封装和集成,见到好东西 自己懒的再重做,二话不说就封装)

用它就更简单了:

    @Test
    public void TestAPPcontext(){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ioc-beans.xml");
        UserInter userInter = (UserInter)applicationContext.getBean("UserInter");
        System.out.println("获取封装bean工厂-applicationContext中创建的bean"+userInter);
        
    }

跟上面比较一下 显然这个更简单是吧

二者的区别

BeanFactory(Bean工厂):

BeanFactory是Spring框架的最基本的接口,提供了最简单的Bean容器的功能。
BeanFactory以延迟加载的方式实例化和管理Bean对象,即在使用时才去创建Bean实例。
BeanFactory的主要功能是提供Bean的实例化、依赖注入和生命周期管理。
BeanFactory是一个轻量级的容器,适用于资源受限的环境或需要精细控制Bean实例化和管理的情况。
ApplicationContext(应用上下文):

ApplicationContext是BeanFactory的一个子接口,提供了更多的功能和扩展性。
ApplicationContext在容器启动时就完成了Bean的实例化,提前解决了Bean的依赖关系。
ApplicationContext提供了更多的特性,如国际化支持、事件发布、AOP集成、资源加载等。
ApplicationContext是一个更重量级的容器,适用于大多数应用场景,提供更便捷的开发体验。
主要区别:

实例化方式:BeanFactory使用延迟加载,而ApplicationContext在容器启动时就完成了Bean的实例化。
功能和特性:ApplicationContext提供了更多的功能和特性,如国际化支持、事件发布、AOP集成等,而BeanFactory提供了基本的Bean管理功能。
资源消耗:BeanFactory是轻量级容器,占用较少的资源;而ApplicationContext是重量级容器,占用较多的资源。
使用场景:BeanFactory适用于资源受限的环境或需要精细控制Bean实例化和管理的情况;ApplicationContext适用于大多数应用场景,提供更便捷的开发体验和更丰富的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值