当前位置: 首页 > news >正文

源码角度分析@configuration和@component不同

        1.@configuration是@component的内部类,@configuration包含@component注解。

        2.@configuration中所有带@Bean都会被CGLIB动态代理,调用此配置类中的方法都会返回同一个实例。@component不会被代理,调用配置类中的方法都会新建一个实例。

        3.@configuration标注的类要求:       

                1.必须是类(不可以是工厂返回的实例),不能是final类(final不可CGLIB动态代理)

                2.配置类不可以是native方法

                3.嵌套配置类需要声明为static

                4.@Bean方法不会进一步反过来创建配置类,即便有@configuration,只会作为不同的Bean

加载流程:

1.再springboot程序,run方法中,有个refreshcontext(),的refresh()

2.obtainFreshBeanFactoryConfigurationClassPostProcessor 注册到beanDefinition中

3.invokeBeanFactoryPostProcessors 实例化ConfigurationClassPostProcessor ,将配置类带@configuration的配置类添加标志位FULL,@component、@ComponentScan添加Lite。

4.通过invokeBeanFactoryPostProcessors将FULL的配置类通过Enhancer再字节码层面生成CGLIB子类,替换原来的@Bean方法。

5.finishBeanFactoryInitialization实例化非懒加载对象。

http://www.lryc.cn/news/119043.html

相关文章:

  • 实现分布式事务:Java与MySQL的XA事务协调
  • 如何通过CRM系统进行成功的客户生命周期管理?
  • Leetcode 977. 有序数组的平方
  • vue3中使用toValue
  • 阿里云国际版CDN使用教程!
  • 【docker】Dockerfile构建镜像常用指令:
  • Java课题笔记~ 会话跟踪
  • HbuildX生成安卓签名证书
  • 在Ruoyi中采用Ajax动态生成Echarts图表实践
  • 资讯速递 | ArkUI-X 预览版已正式开源!
  • HTML <select> 标签
  • Flutter:文件上传与下载(下载后预览)
  • [前端系列第6弹]Ajax简明教程:轻松实现Web页面的异步交互
  • ssh-keygen 做好免密登录后不生效
  • 【Java可执行命令】(十八)可视化监控和管理工具 jconsole:获取 JVM的内存使用情况、线程活动、GC 行为等重要指标的可视化工具 ~
  • leetcode做题笔记66
  • 【docker】设置 docker 国内镜像报错,解决方案
  • mac安装nvm管理工具遇到的问题和解决方法
  • DocX 生成Word
  • 数据库新闻速递 -- POSTGRESQL 正在蚕食数据库市场 (翻译)
  • PAT 1085 Perfect Sequence
  • 软件测试面试夺命连环十七问,你答得上来么?这都不会建议多学!
  • 【学习FreeRTOS】第5章——FreeRTOS任务挂起与恢复
  • gitblit-使用
  • 整数中1出现的次数(从1到n整数中1出现的次数)
  • Vue2:路由
  • 【Docker】Docker的应用场景,Docker 的优点,Ubuntu Docker 安装,使用 Shell 脚本进行安装
  • CentOS7 启动谷歌浏览器 java+Selenium+chrome+chromedriver
  • 【无公网IP】在公网环境下Windows远程桌面Ubuntu 18.04
  • Java“牵手拼多多商品详情数据采集方法,拼多多API接口申请指南