Spring中BeanFactory接口的作用小结

 更新时间:2025年09月22日 09:15:59   作者:FromZero2One  
BeanFactory是Spring IOC核心接口,负责管理Bean的实例化、配置与生命周期,通过配置类构建BeanDefinition,注册并解析注解,实现依赖注入,确保Bean正确加载与管理,本文就来详细介绍一下,感兴趣的可以了解一下

BeanFactory是Spring IOC的最核心与最底层的接口,它负责实例化、配置和管理应用程序中的对象(这些对象被称为 Bean)。可以将它理解为一个高级的、可配置的对象工厂,它的主要工作就是生产和管理 Bean。

1.准备配置类

 @Configuration
    static class Config{
        @Bean
        public Bean1 bean1(){
            return new Bean1();
        }
        @Bean
        public Bean2 bean2(){
            return new Bean2();
        }

    }
    static class Bean1{
        private static final Logger log = LoggerFactory.getLogger(Bean1.class);
        public Bean1(){
            log.debug("构造bean1");
        }
       /* @Autowired
        private Bean2 bean2;
        public Bean2 getBean2(){
            return bean2;
        }*/

    }
    static class Bean2{
        private static final Logger log = LoggerFactory.getLogger(Bean2.class);
        public Bean2(){
            log.debug("构造 Bean2()");
        }
    }

2.beanFactory实现注入

public class TestBeanFactory {
    public static void main(String[] args) {
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        //bean的定义(class,scope,初始化,销毁)
        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(Config.class).setScope("singleton").getBeanDefinition();
        beanFactory.registerBeanDefinition("config",beanDefinition);
      
        for(String name:beanFactory.getBeanDefinitionNames()){
            System.out.println(name);
        }
    }

首先使用BeanDefinitionBuilder为bean对象构造beanDefinition对象,beanFactory把这些bean的定义收集起来并注册管理。

3.打印对象

打印的对象只有Config,但是里面的@Bean注入的对象并没有生效。

4.配置beanFactory后处理器

通过配置beanFactory的后处理器,可以解析配置类里面注解配置的类并注入到BeanFactory工厂里面。

 public static void main(String[] args) {
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        //bean的定义(class,scope,初始化,销毁)
        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(Config.class).setScope("singleton").getBeanDefinition();
        beanFactory.registerBeanDefinition("config",beanDefinition);
        //给BeanFactory一些常用的后处理器
        AnnotationConfigUtils.registerAnnotationConfigProcessors(beanFactory);
        //BeanFactory后处理器主要功能是补充一些bean的定义
        beanFactory.getBeansOfType(BeanFactoryPostProcessor.class).values().stream().forEach(beanFactoryPostProcessor -> {
            beanFactoryPostProcessor.postProcessBeanFactory(beanFactory);
        });
        for(String name:beanFactory.getBeanDefinitionNames()){
            System.out.println(name);
        }
    }

其中通过AnnotationConfigUtils可以注入常用的beanFactory的后处理器, 

 AnnotationConfigUtils.registerAnnotationConfigProcessors(beanFactory);

处理之后的结果如下,其中包括了beanFactory的后处理器。

到此这篇关于Spring中BeanFactory接口的作用小结的文章就介绍到这了,更多相关Spring BeanFactory接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java九九乘法表示例

    java九九乘法表示例

    这篇文章主要介绍了java九九乘法表示例,需要的朋友可以参考下
    2014-04-04
  • 详解Java如何简化条件表达式

    详解Java如何简化条件表达式

    在复杂的实际业务中,往往会出现各种嵌套的条件判断逻辑。随着需求的增加,条件逻辑会变得越来越复杂。面对这种情况,简化判断逻辑就是不得不做的事情,下面为大家介绍几种方法
    2022-06-06
  • @Transactional跟@DS动态数据源注解冲突的解决

    @Transactional跟@DS动态数据源注解冲突的解决

    这篇文章主要介绍了@Transactional跟@DS动态数据源注解冲突的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java C++分别实现滑动窗口的最大值

    Java C++分别实现滑动窗口的最大值

    这篇文章主要介绍了分别通过Java和C++实现滑动窗口最大值,即给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。感兴趣的可以了解一下
    2021-12-12
  • 使用Java将Excel中的数字转换为文本或将文本型数字转换为数字

    使用Java将Excel中的数字转换为文本或将文本型数字转换为数字

    在 Excel 中,数字有时会以文本的形式存储,这可能会影响数据的计算、排序和处理,无论是将数字转换为文本,还是将文本型数字转换为数字,这两种操作在处理 Excel 数据时都非常常见且重要,本文将介绍如何使用 Java 完成这两个任务,需要的朋友可以参考下
    2025-12-12
  • IDEA导入jar包的完整实现步骤

    IDEA导入jar包的完整实现步骤

    由于导入jar包项目存在很多不确定的问题,导致每次都需要调试、配置好多遍,对此特意记录下来,这篇文章主要给大家介绍了关于IDEA导入jar包的相关资料,需要的朋友可以参考下
    2024-01-01
  • 一起聊聊Java中13种锁的实现方式

    一起聊聊Java中13种锁的实现方式

    分布式系统时代,线程并发,资源抢占,"锁" 慢慢变得很重要。那么常见的锁都有哪些?本文就来和大家聊聊Java中13种锁的实现方式,感兴趣的可以了解一下
    2022-08-08
  • java遍历途中修改数据及删除数据的方法总结

    java遍历途中修改数据及删除数据的方法总结

    在使用java的集合类遍历数据的时候,在某些情况下可能需要对某些数据进行删除,下面这篇文章主要给大家介绍了关于java遍历途中修改数据及删除数据的方法总结,需要的朋友可以参考下
    2023-10-10
  • 解决springboot 2.x 里面访问静态资源的坑

    解决springboot 2.x 里面访问静态资源的坑

    这篇文章主要介绍了解决springboot 2.x 里面访问静态资源的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • SSM框架中entity mapper dao service controller层的使用

    SSM框架中entity mapper dao service controll

    这篇文章主要介绍了SSM框架中entity mapper dao service controller层的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论