设为首页 加入收藏

TOP

Spring:现代Java开发的必备框架(一)
2023-07-25 21:38:12 】 浏览:56
Tags:Spring 现代 Java

Spring:现代Java开发的必备框架

Spring是一个轻量级的Java框架,它提供了各种企业级应用程序开发的工具和技术。Spring框架的核心是IoC容器和AOP框架。IoC容器使得Java应用程序的组件化变得更加容易,AOP框架使得Java应用程序的切面编程变得更加容易。Spring框架还提供了许多其他的功能,例如数据访问、Web开发、安全性、事务管理等。

Spring创建bean的生命周期以及对应的接口和注解

Spring创建bean的生命周期包含以下步骤:

  1. 实例化Bean:Spring通过构造器或工厂方法来创建Bean实例。
  2. 设置Bean属性:Spring通过setter方法或直接访问字段来设置Bean的属性值。
  3. BeanNameAware接口:如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法。
  4. BeanFactoryAware接口:如果Bean实现了BeanFactoryAware接口,Spring将BeanFactory实例传递给setBeanFactory()方法。
  5. ApplicationContextAware接口:如果Bean实现了ApplicationContextAware接口,Spring将ApplicationContext实例传递给setApplicationContext()方法。
  6. Pre-Initialization BeanPostProcessor:在Bean初始化之前,Spring通过调用PostProcessBeforeInitialization()方法提供了一个扩展点,可以在Bean初始化之前对Bean进行定制。
  7. InitializingBean接口:如果Bean实现了InitializingBean接口,Spring将调用afterPropertiesSet()方法。
  8. 自定义初始化方法:Bean可以自定义初始化方法,只需要在Bean定义中指定该方法的名称。
  9. Post-Initialization BeanPostProcessor:在Bean初始化之后,Spring通过调用PostProcessAfterInitialization()方法提供了一个扩展点,可以在Bean初始化之后对Bean进行定制。
  10. DisposableBean接口:如果Bean实现了DisposableBean接口,Spring将调用destroy()方法。
  11. 自定义销毁方法:Bean可以自定义销毁方法,只需要在Bean定义中指定该方法的名称。

在Spring中,可以使用以下注解来控制Bean的生命周期:

  • @PostConstruct:指定初始化方法,相当于InitializingBean接口的afterPropertiesSet()方法。
  • @PreDestroy:指定销毁方法,相当于DisposableBean接口的destroy()方法。
  • @Bean(initMethod = "initMethod", destroyMethod = "destroyMethod"):指定初始化方法和销毁方法。

Spring使用三级缓存解决循环依赖的原理

  1. singletonObjects:保存已经完全创建好的单例Bean。
  2. earlySingletonObjects:保存已经实例化、但是还未填充属性的单例Bean。
  3. singletonFactories:保存Bean的工厂方法。

当两个Bean相互依赖时,Spring会先使用工厂方法创建一个Bean的代理对象,然后将代理对象放入到singletonFactories缓存中。接着,Spring会继续创建被依赖的Bean。如果创建被依赖的Bean时,需要引用到代理对象,Spring会先到singletonFactories缓存中查找代理对象,如果找到了,就使用代理对象,否则就继续创建代理对象。当被依赖的Bean创建完成后,Spring会将被依赖的Bean放入到singletonObjects缓存中。接着,Spring会回到代理对象,填充代理对象的属性,然后将代理对象放入到earlySingletonObjects缓存中。当代理对象的属性填充完成后,Spring会将代理对象替换成真正的Bean对象,然后将真正的Bean对象放入到singletonObjects缓存中,并清除earlySingletonObjects缓存和singletonFactories缓存中的代理对象。

Spring使用三级缓存创建bean的过程

Spring使用三级缓存创建Bean的详细过程如下:

  1. 首先,Spring会检查该Bean是否已经创建并存储在singletonObjects缓存中。如果Bean已经存在,则直接返回该Bean实例。这是最快的情况。
  2. 如果Bean不存在于singletonObjects缓存中,Spring会检查该Bean是否正在创建中。如果正在创建中,则返回一个代理对象,该代理对象会在真正的Bean创建完成后被替换成真正的Bean对象。这是为了防止循环依赖的情况。
  3. 如果该Bean既不存在于singletonObjects缓存中,也没有正在创建中,则Spring会创建一个ObjectFactory,该ObjectFactory负责创建该Bean实例。ObjectFactory是一个工厂方法,它负责创建和返回Bean实例。
  4. 然后,Spring会将该ObjectFactory存储到singletonFactories缓存中,以便下次获取该Bean实例时使用。这是为了提高创建Bean实例的效率。
  5. 接着,Spring会检查该Bean是否依赖于其他Bean。如果依赖于其他Bean,则会先创建依赖的Bean实例。依赖项可以是其他Bean,也可以是基本类型或集合。
  6. 如果依赖的Bean实例还不存在,则Spring会递归地创建依赖的Bean实例,直到所有依赖的Bean实例都已经创建完成。这是为了保证依赖关系正确。
  7. 如果所有依赖的Bean实例都已经创建完成,则Spring会从singletonFactories缓存中获取该Bean的ObjectFactory,并使用该ObjectFactory创建该Bean实例。这是Bean实例的创建过程。
  8. 创建该Bean实例后,Spring会将该Bean实例存储到earlySingletonObjects缓存中,以便后续填充该Bean的属性。earlySingletonObjects缓存包含已经创建的单例Bean实例,但是还没有填充属性。
  9. 接着,Spri
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇IDEA: 如何导入项目模块 以及 将.. 下一篇Java速成Web开发(二)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目