Spring中BeanFactory接口的作用小结
作者: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接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!