Spring框架总结之依赖注入(一)

Spring框架总结之依赖注入(一)

 

DI(Depandency Injection),也叫“依赖注入”,与人也称其为“控制反转(IOC)”,而我更喜欢把它称之为DI。传统的Java对象,对其本身及关联的对象(Bean),都是自主创建和管理的,这样就导致高度耦合和难以测试的问题。而Spring框架则意识到这个问题,其提供的DI功能,可以完美的解决Bean及其依赖的Bean的创建、装配及生命周期等管理工作,这个管理机制称为“Spring容器”,也是Spring框架的核心模块。这里我会从Spring的DI原理、Bean生命周期及Bean装配三方面介绍DI。后续文章中,会以一例子来贯穿同类文章中的DI实现方式和细节的介绍,对于通用的代码和内容只会罗列一次,有需要的读者,可以跳转查看。

 

l  DI工作原理

l  Bean生命周期

l  Bean装配机制

 

1、DI工作原理

如上图所示,Spring 注入机制首先将Bean注入到容器中,而这些Bean会被自动实例化,默认情况下,它们以单例模式存在。然后,Spring装配机制,借助Java的映射机制,获取已经实例化Bean对象,并根据Java描述对象关系的XML或 JavaConfig配置关系,将被依赖的Bean的引用,嵌入到依赖主体的Bean中,这里对应A为依赖主体Bean,而B、C则是被依赖Bean,也就是A需要依赖B和C才能完成某件功能的关系。另外,在图中没有体现的是Spring对这些Bean生命周期的管理,那么在下面看下Bean的整个生命周期是什么?

 

2、Bean生命周期

 

如上图所示,这里使用方法调用过程演示Bean的生命周期:

1、容器对Bean实例化,并对Bean的引用和值注入到Bean;

2、若Bean实现BeanNameAware接口,Spring会将Bean的id传递给setBeanName方法;

3、若Bean实现BeanFactoryAware接口,Spring将调用其对应的setBeanFactory方法,并将BeanFactory实例传递进去;

4、若Bean实现ApplicationContextAware接口,Spring将调用它的setApplicationContext方法,将对应Bean的上下文引用传递进去;

5、若Bean实现BeanPostProcessor接口,Spring将调用对应的processBeforeInitialization方法预初始化准备工作;

6、若Bean实现InitializingBean接口,Spring将调用afterPropertiesSet方法。如果实现了init-method (自定义实现)方法,那么这个方法也同样被调用;

7、若Bean实现BeanPostProcessor接口,Spring将调用processAfterInitialization方法结束初始化准备工作;

8、到这里,Bean已经可以使用了,它们会一直驻留在应用上下文中,直到其应用上下文被回收掉或销毁为止;

9、若Bean实现DisposableBean接口,Spring将调用其destory方法。如果实现了destory-method(自定义实现)方法,它也会被调用;

 

Note:

Spring的DI的工作机制表复杂,这里只抽象出它的实现原理结构及Bean的生命周期的一系列节点过程。

 

3、Bean装配机制

 

如上图所示,请结合上面的DI原理和Bean生命周期查看本部分内容,而这里主要介绍Profile和Assembly Method。它们是在Spring3引入的新特性,主要用来在运行时动态装配值或引用到Bean的属性和构造方法中,当然,默认的情况是硬编码方式,装配和简历关系,至于硬编码的好坏这里不做介绍。对于Profile,它主要用在注入和装配不同配置的开关的,也就是放在Profile范围内的Bean(该Profile被激活),才能被注入和装配,否则Spring只能注入和装配未在Profile范围的Bean,它常用在应用部署环境迁移方面。

 

 

 

好了,本篇就介绍这里,后续文章将继续总结Spring装配的实现及各个细节的详细实现。由于作者水平有限,请在评论或(QQ: 245389109)不吝赐教,谢谢。

 

 

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云水之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值