💡
原文中文,约13200字,阅读约需32分钟。
📝
内容提要
介绍Spring中@Configuration注解的Full模式和Lite模式的处理方式,以及动态代理增强配置类的方法。通过源码分析讲解增强类中的setCallbackFilter方法和BeanMethodInterceptor拦截器的作用,以及避免Full模式下@Bean注解标记的方法重复创建Bean。
🎯
关键要点
- @Configuration 和 @Component 的区别在于前者注册到 Spring 容器中的 Bean 是 CGLIB 代理的 Bean,而后者是原始 Bean。
- @Configuration 注解的处理分为 Full 模式和 Lite 模式,使用 ConfigurationClassPostProcessor 进行处理。
- Full 模式的配置类需要 @Configuration 注解且 proxyBeanMethods 属性不为 false,Lite 模式则相反。
- postProcessBeanDefinitionRegistry 方法用于判断配置类的模式,并标记 BeanDefinition。
- postProcessBeanFactory 方法通过 CGLIB 动态代理增强配置类,以便处理 Bean 请求。
- 增强类中的 setCallbackFilter 方法包含多个方法拦截器,BeanMethodInterceptor 是关键拦截器。
- 在 Full 模式下,调用 @Bean 注解标记的方法不会导致 Bean 的重复创建,使用了拦截方法进行处理。
➡️