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

烟台住房和城乡建设局网站辽宁移动惠生活app官方版

烟台住房和城乡建设局网站,辽宁移动惠生活app官方版,24小时学会网站建设下载,我的家乡湛江网站设计1、生命周期 划分为5个阶段: 创建前准备阶段、创建实例阶段、 依赖注入阶段、 容器缓存阶段、销毁实例阶段。一、创建前准备阶段:这个阶段主要的作用是,Bean 在开始加载之前,需要从上下文和相关配置中解 析并查找 Bean 有关的扩展…

1、生命周期

划分为5个阶段:

创建前准备阶段、
创建实例阶段、
依赖注入阶段、
容器缓存阶段、
销毁实例阶段。
一、创建前准备阶段:
这个阶段主要的作用是,Bean 在开始加载之前,需要从上下文和相关配置中解
析并查找 Bean 有关的扩展实现
比如像 init-method-容器在初始化 bean 时调用的方法、destory-method,容器在
销毁 bean 时调用的方法。
以及,BeanFactoryPostProcessor 这类的 bean 加载过程中的前置和后置处理。
这些类或者配置其实是 Spring 提供给开发者,用来实现 Bean 加载过程中的扩
展机制,在很多和 Spring 集成的中间件中比较常见,比如 Dubbo
二、创建实例阶段
这个阶段主要是通过反射来创建 Bean 的实例对象,并且扫描和解析 Bean 声明
的一些属性。
三、依赖注入阶段
如果被实例化的 Bean 存在依赖其他 Bean 对象的情况,则需要对这些依赖 bean
进行对象注入。比如常见的@Autowiredsetter 注入等依赖注入的配置形式。
同 时 , 在 这 个 阶 段 会 触 发 一 些 扩 展 的 调 用 , 比 如 常 见 的 扩 展 类 :
BeanPostProcessors(用来实现 bean 初始化前后的扩展回调)、
InitializingBean(这个类有一个afterPropertiesSet(),这个在工作中也比较常见)、
BeanFactoryAware 等等。
四、容器缓存阶段
容器缓存阶段主要是把 bean 保存到容器以及 Spring 的缓存中,到了这个阶段,
Bean 就可以被开发者使用了。
这个阶段涉及到的操作,常见的有,init-method 这个属性配置的方法, 会在这
个阶段调用。
以及像BeanPostProcessors 方法中的后置处理器方法如 :
postProcessAfterInitialization,也会在这个阶段触发。
五、销毁实例阶段
Spring 应用上下文关闭时,该上下文中的所有 bean 都会被销毁。
如果存在 Bean 实现了 DisposableBean 接口,或者配置了 destory-method 属性,
会在这个阶段被调用。

2、IOC工作流程:

第一个阶段,就是 IOC 容器的初始化

这个阶段主要是根据程序中定义的 XML 或者注解等 Bean 的声明方式,通过解析和加载后生成 BeanDefinition,然后把 BeanDefinition 注册到 IOC 容器。

第二个阶段,完成 Bean 初始化及依赖注入
这个阶段会做两个事情 ,
通过反射针对没有设置 lazy-init 属性的单例 bean 进行初始化。
完成 Bean 的依赖注入。
第三个阶段,Bean 的使用
通常我们会通过@Autowired或者BeanFactory.getBean()IOC容器中获取指定的 bean 实例。
另外,针对设置 layy-init 属性以及非单例 bean 的实例化,是在每次获取 bean
对象的时候,调用 bean 的初始化方法来完成实例化的,并且 Spring IOC 容器不会去管理这些 Bean

3、AOP过程

Spring AOP 源码解析_Javadoop

核心BeanPostProcessor :发生在实例化Bean之后,拦截当前 bean 的 advisor、advice、interceptor,并且根据被代理类的实现方式来选择使用cglib还是jdk代理。

3、如何解决循环依赖

原因:多个 Bean 互相之间持有对方的引用就会 发生循环依赖。循环的依赖将会导致注入死循环。

解决过程:

Spring 中设计了三级缓存来解决循环依赖问题,当我们去调用 getBean()方法
的时候,Spring 会先从一级缓存中去找到目标 Bean,如果发现一级缓存中没有
便会去二级缓存中去找,而如果一、二级缓存中都没有找到,意味着该目标 Bean
还没有实例化。于是,Spring 容器会实例化目标 BeanPS:刚初始化的 Bean
称为早期 Bean) 。然后,将目标 Bean 放入到二级缓存中,同时,加上标记是
否存在循环依赖。如果不存在循环依赖便会将目标 Bean 存入到二级缓存,否则,
便会标记该 Bean 存在循环依赖,然后将等待下一次轮询赋值,也就是解析
@Autowired 注解。等@Autowired 注解赋值完成后,会将目标 Bean 存入到一
级缓存
Spring
一级缓存中存放所有的成熟 Bean
二级缓存中存放所有的早期 Bean
三级缓存中存放代理 Bean:需要通过代理工厂实现的Bean实例化并且赋值之后存入到三级缓存中,最终也会将赋值好的 Bean 同步到一级缓存中。

4、BeanFactory和FactoryBean

首先,Spring 里面的核心功能是 IOC 容器,所谓 IOC 容器呢,本质上就是一个
Bean 的容器或者是一个 Bean 的工厂。
它能够根据 xml 里面声明的 Bean 配置进行 bean 的加载和初始化,然后
BeanFactory 来生产我们需要的各种各样的 Bean
所以我对 BeanFactory 的理解了有两个。
BeanFactory 是所有 Spring Bean 容器的顶级接口,它为 Spring 的容器定义了
一套规范,并提供像 getBean 这样的方法从容器中获取指定的 Bean 实例。
BeanFactory 在产生 Bean 的同时,还提供了解决 Bean 之间的依赖注入的能力,
也就是所谓的 DI
FactoryBean 是一个工厂 Bean,它是一个接口,主要的功能是动态生成某一个
类型的 Bean 的实例,也就是说,我们可以自定义一个 Bean 并且加载到 IOC
器里面。
它里面有一个重要的方法叫 getObject(),这个方法里面就是用来实现动态构建
Bean 的过程
http://www.yayakq.cn/news/405662/

相关文章:

  • 网站建设完成后 下一步做什么hao123主页下载安装
  • 广州微信网站制作外国设计网站推荐
  • 简单网站建设教学视频长沙网站建设 个人
  • 网站开发三端指哪三端扬中网站建设好么
  • 郑州网站建站网站怎么样做企业商城网站要多少钱
  • 网站 业务范围做网站的时候遇到的问题
  • 网站关键词被百度屏蔽怎么办SEO案例网站建设
  • 网站的头尾和导航的公用文件营销网站建设联系方式
  • 永兴城乡住房建设部网站天津做推广的公司
  • 网站 备案 拍照重庆市建筑工程信息网官网
  • 简洁大气企业网站源码网络宣传的方法有哪些
  • 外贸网站交易平台如何在微信内做网站
  • 怎样选择网站建设公司晋城建设路网站
  • 关键词排名优化软件策略东莞百度seo哪家好
  • 重庆帝一网络网站建设专家企业网页制作教程和流程
  • 网站幻灯片效果代码苏州做网站设计的公司
  • 江西省上饶市建设局网站wordpress群发
  • 眉山网站优化网站暂时关闭 seo
  • 怎么免费建设网站如何建立一家公司网站
  • 外贸网站建设需要多少钱反邪手机网站建设方案
  • 企业做网站设置哪些模块建筑资料哪个网最全
  • 长沙网站建设公司排行榜wordpress 分类 列表页
  • 申请网站的域名一个简单鲜花的html网页
  • 做网站是怎么赚钱吗烟台建设信息网站
  • 黑龙江省建设安全协会网站wordpress怎么二次开
  • 青浦华新网站建设长沙建筑模板厂家
  • 如何做网站建设方案怎么修改网站默认首页
  • 上海建设银行官网网站网页在线代理翻墙
  • 长沙河西做网站企业主体负责人和网站负责人
  • 上海网站建设推广河北百度推广seo