spring 5.0.x源码学习系列七: 后置处理器Config

2021-03-22  本文已影响0人  avengerEug

前言

一、ConfigurationClassPostProcessor之BeanFactoryPostProcessor身份

二、项目demo

2.1 项目全景图

在这里插入图片描述

2.1.1 AppConfig

在这里插入图片描述

2.1.2 Bean1

在这里插入图片描述

2.1.3 Bean2

在这里插入图片描述

2.1.4 Entry 在这里插入图片描述

2.2 运行结果

2.2.1 AppConfig类中无@Configuration注解的运行结果

在这里插入图片描述

2.2.1 AppConfig类中有@Configuration注解的运行结果

在这里插入图片描述

2.3 解释运行结果

情形 运行结果 原因
AppConfig中无@Configuration注解 打印了两次"creating bean1" 运行的没有一点毛病, 按照正常逻辑, 执行了两次(spring创建Bean1的时候调用了一次, 创建Bean2的时候又调用了一次)创建bean的方法, 所以输出两次"creating bean1", 没毛病
AppConfig中存在@Configuration注解 只打印了一次"creating bean1" 是因为spring在执行BeanFactoryPostProcessor后置处理器时. 执行到了ConfigurationClassPostProcessor的postProcessBeanFactory方法, 此方法对所有的全注解类进行了CGLIB代理, 对方法进行了增强, 但此时只是将产生的cglib的class添加到了当前全配置类对应的beanDefinition的beanClass属性中(注意: 此时并没有产生bean, 只是改变了beanClass属性)

2.4 查看cglib代理类内容

2.4.1 设置指定属性, 将cglib代理类保存至指定地方

// 将整个工程中产生的cglib代理类全部存入g盘的cglib文件夹中
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "g://cglib");

2.4.2 运行项目并查看文件夹

在这里插入图片描述

2.4.3 将整个com文件夹copy至idea中可以解析class文件的目录下

三、总结

上一篇 下一篇

猜你喜欢

热点阅读