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

河南省建设厅督察网站视觉差网站设计

河南省建设厅督察网站,视觉差网站设计,网络舆情风险,长沙制作公园仿竹围栏哪家便宜文章目录 一、简介二、FactoryBean 接口的方法三、FactoryBean 与 BeanFactory 的区别四、源码解析五、实际应用 一、简介 FactoryBean 是 Spring 框架中的一个接口#xff0c;用来创建特定类型的 Bean 对象。实现FactoryBean 接口就可以自定义 Bean 对象的创建过程。Factory… 文章目录 一、简介二、FactoryBean 接口的方法三、FactoryBean 与 BeanFactory 的区别四、源码解析五、实际应用 一、简介 FactoryBean 是 Spring 框架中的一个接口用来创建特定类型的 Bean 对象。实现FactoryBean 接口就可以自定义 Bean 对象的创建过程。FactoryBean 本身也是 Bean会在 Spring 中经历 Bean 的生命周期而由 FactoryBean 创建的 Bean 不经历 Bean 的生命周期。 二、FactoryBean 接口的方法 FactoryBean 内部包含了一下三个方法 getObject()FactoryBean 最重要的方法用于返回被管理的Bean对象的实例。getObjectType()返回的 Bean 对象的类型。isSingleton()用于指示返回的 Bean 对象是否为单例。 三、FactoryBean 与 BeanFactory 的区别 有的人分不清 FactoryBean 和 BeanFactory 其实只要是粗略看过 Spring 源码的人都会知道BeanFactory 是 Spring 容器的顶层接口这个接口定义了 Spring 容器最基本的功能如从容器中获取 Bean判断 Bean 是不是单例等归根结底它是一个工厂或者是一个容器用来创建和管理 Bean 的而 FactoryBean 是一种特殊的 Bean注意它是个 Bean只不过它让我们可以自定义创建 Bean 的过程。 四、源码解析 首先我们先找到 Spring 启动时初始化 Bean 的核心方法位于 AbstractApplicationContext 类 refresh 方法里的 finishBeanFactoryInitialization(beanFactory)在这个方法里找到最后一行最核心的方法 beanFactory.preInstantiateSingletons() 在这个方法里找到下面这段代码。 这段代码是从 Spring 容器里获取所有的非抽象的、单例的、非懒加载的 Bean然后判断是不是 FactoryBean如果不是就直接调用 getBean 方法完成初始化如果是就判断是不是需要紧急初始化。 这里需要注意FactoryBean 也是做为一个 Bean 放在 Spring 容器里的从容器里获取这个 FactoryBean 实例需要在名称前加上 符号如果不加的话获取的是 FactoryBean 创建出来的 Bean 实例所以这里通过 Object bean getBean(FACTORY_BEAN_PREFIX beanName); 这样获取这个 FACTORY_BEAN_PREFIX 就是 符号。 另外这里出现了 SmartFactoryBean 这个接口这个接口是 FactoryBean 的子接口其内部通过 isEagerInit 方法来控制是否紧急初始化所以这里代码的意思就是如果是 SmartFactoryBean 类型的 FactoryBean 并且 isEagerInit 是 true 的才会立即调用 getBean 方法完成初始化。 我们继续跟着 getBean 方法往里看 继续跟进 doGetBean找到创建 Bean 实例的核心代码 在调用完 getSingleton 方法后会将 FactoryBean 实例放到 Spring 容器里再调用 getObjectForBeanInstance 方法获取 Bean 实例我们跟进去看看 继续跟进 第一个if判断用处是防止那种不是 FactoryBean但是前面带了 符号进来的。 第二个if判断就是如果是普通的 bean 或者是 FactoryBean就返回其实例本身这就是我们上面说的如果 FactoryBean 的 beanName 前面带了 符号就返回 FactoryBean 本身。 能继续往下走就说明一定是 FactoryBean 了所以类型强转后调用 getObjectFromFactoryBean 方法我们继续跟进 这里用了一些缓存的机制我们不用管继续跟进 doGetObjectFromFactoryBean 方法 我们可以看到最终调用了 FactoryBean 的 getObject 方法 五、实际应用 FactoryBean 的实际应用场景有很多例如 SpringAop 的 ProxyFactoryBean 用来创建 AOP 代理Mybatis 的 MapperFactoryBean 用来创建 Mapper 的代理对象Fegin 的 FeignClientFactoryBean 用来创建远程服务代理。 有兴趣的小伙伴可以在任意一个 FactoryBean 的 getObject() 方法上打上断点启动服务看看具体的方法调用栈可以更好的帮助学习源码。
http://www.huolong8.cn/news/462039/

相关文章:

  • 加强网站备案管理wordpress图集功能
  • 网站开发应该学哪门语言略阳县有关作风建设的网站
  • 网站设计改版wordpress 提交插件
  • 做一个网站后期维护需要做什么创建一个自己的公司英语
  • 网站建设前期策划天津注册公司流程和费用标准
  • 大型物流公司网站微信营销网站模板
  • 平台网站建设后台源码投资网站源码
  • 网站备案幕住房和城乡建设部网站防烟排烟
  • 做网站如何收益沧州网站建设的公司
  • 有什么可以下载软件的网站做画找图网站
  • 重庆做汉堡的餐饮公司网站域名138查询网
  • 上海做企业网站c2c平台名称
  • 哪家网站游戏做的比较好百度一下百度一下你就知道
  • 网站系统的设计与制作做周边的网站
  • 西部数码如何建设自己的网站网站答辩ppt怎么做
  • 商丘网站公司电话号码高端品牌网站建设费用
  • 莱芜正规的网站建设北京网络营销推广
  • 广州seo网站策划网站开发模板代码
  • 珠海北京网站建设淄博周村网站建设报价
  • 网站建设 运维 管理包括哪些商标注册程序
  • 企业网站建设开始起步文章微信小程序怎么退出登录
  • 域名备案网站服务内容自己做的网站怎么发到网上
  • 帮助企业做网站的销售个人博客网站开发的原因
  • 华硕建设公司网站国外好的网站
  • 嘉兴网站推广优化电脑系统重装后没有wordpress
  • 好的做网站的公司阿里巴巴网站运营
  • 郑州网站优化平台成都两条传播链在成华区
  • 浏阳烟花网站建站定位及营销功能广州分销商城开发
  • 杭州制作手机网站18勐海县住房和城乡建设局网站
  • 军事网站建设怎么打抖音推广网站