【Spring】在低版本 Spring 中快速实现类似⾃动配置的功能

需求与问题

核⼼的诉求

  • 现存系统,不打算重构
  • Spring 版本3.x,不打算升级版本和引⼊ Spring Boot
  • 期望能够在少改代码的前提下实现⼀些功能增强

⾯临的问题

  • 3.x 的 Spring 没有条件注解
  • ⽆法⾃动定位需要加载的⾃动配置

核⼼解决思路

条件判断

  • 通过 BeanFactoryPostProcessor 进⾏判断

配置加载

  • 编写 Java Config 类
  • 引⼊配置类
    • 通过 component-scan
    • 通过 XML ⽂件 import

Spring 的两个扩展点

BeanPostProcessor

  • 针对 Bean 实例
  • 在 Bean 创建后提供定制逻辑回调

BeanFactoryPostProcessor

  • 针对 Bean 定义
  • 在容器创建 Bean 前获取配置元数据
  • Java Config 中需要定义为 static ⽅法

关于 Bean 的⼀些定制

Lifecycle Callback

  • InitializingBean / @PostConstruct / init-method
  • DisposableBean / @PreDestroy / destroy-method

XxxAware 接⼝

  • ApplicationContextAware
  • BeanFactoryAware
  • BeanNameAware

⼀些常⽤操作

判断类是否存在

  • ClassUtils.isPresent()

判断 Bean 是否已定义

  • ListableBeanFactory.containsBeanDefinition()
  • ListableBeanFactory.getBeanNamesForType()

注册 Bean 定义

  • BeanDefinitionRegistry.registerBeanDefinition()

    • GenericBeanDefinition
  • BeanFactory.registerSingleton()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值