Spring 设计模式 Summary

Spring 设计模式 Summary

1. 简单工厂模式

案例 BeanFactory

org.springframework.beans.factory.BeanFactory

​ 简单工厂模式的体现, 根据传入一个唯一的标识来获得Bean对象, 但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定. 根据 bean 定义, 工厂将返回包含对象的独立实例(原型设计模式)或单个共享实例(单例设计模式的更好替代方案, 其中实例是范围内的单例)工厂).

本质

​ 由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类.

核心原理
bean容器的启动阶段

Step1 读取 Bean 配置, 将 Bean 元素转换成 BeanDefinition 对象

Step2 通过 BeanDefinitionRegistry 将这些bean注册到 beanFactory 中,保存在它的一个 ConcurrentHashMap

Step3BeanDefinition 注册到了 beanFactory 之后,在这里 Spring 为我们提供了 一个扩展的切口, 允许我们 通过实现接口

BeanFactoryPostProcessor 在此处来插入我们定义的代码

Tips: PropertyPlaceholderConfigurer,我们一般在配置数据库的dataSource时使用到的占位符的值,就是它注入进去的

容器中bean的实例化阶段

​ 实例化阶段主要是通过 反射 或者 CGLIB 对bean进行实例化,在这个阶段Spring又给我们暴露了很多的扩展点.

各种的Aware接口,比如 BeanFactoryAware,对于实现了 这些Aware接口的bean,在实例化bean时Spring会帮我们注入对应的BeanFactory的实例

BeanPostProcessor接口,实现了 BeanPostProcessor 接口的bean,在实例化bean时Spring会帮我们调用接口中的方法。

InitializingBean接口,实现了 InitializingBean 接口的 bean,在实例化bean时Spring会帮我们调用接口中的方法。

DisposableBean接口,实现了 BeanPostProcessor 接口的 bean,在该bean死亡时Spring会帮我们调用接口中的方法。

意义

​ **松耦合。**可以将原来硬编码的依赖,通过Spring这个BeanFactory这个工厂来注入依赖,也就是说原来只有依赖方和被依赖方,现在我们引入了第三方——Spring 这个 BeanFactory,由它来解决bean之间的依赖问题,达到了松耦合的效果.

​ **Bean的可扩展处理。**通过Spring接口的暴露,在实例化bean的阶段我们 可以进行一些额外的处理,这些额外的处理只需要让bean实现对应的接口即可,那么 Spring就会在 bean的生命周期 调用我们实现的接口来处理该bean.

摘录

Bean 工厂实现应尽可能支持标准的 bean 生命周期接口。全套初始化方法及其标准顺序为:

  1. BeanNameAware 的setBeanName
  2. BeanClassLoaderAware 的setBeanClassLoader
  3. BeanFactoryAware 的setBeanFactory
  4. 环境意识的setEnvironment
  5. EmbeddedValueResolverAware 的setEmbeddedValueResolver
  6. ResourceLoaderAware setResourceLoader (仅在应用程序上下文中运行时适用)
  7. ApplicationEventPublisherAware setApplicationEventPublisher (仅在应用程序上下文中运行时适用)
  8. MessageSourceAware setMessageSource (仅在应用程序上下文中运行时适用)
  9. ApplicationContextAware setApplicationContext (仅在应用程序上下文中运行时适用)
  10. ServletContextAware setServletContext (仅适用于在 Web 应用程序上下文中运行时)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值