Spring扩展分析

获取spring的ApplicationContext几种方式

Spring扩展分析_第1张图片

一种是实现ApplicationContextAware接口,一种是跟普通的自动注入一样。

下面是Spring高版本才提供的:

Spring扩展分析_第2张图片

记住只能有一个构造函数,上面有两个构造函数是错误,随意删除一个即可。同时注意有 User参数的构造函数,必须在Spring容器有 User类型的对象才行。

探讨ApplicationContextAware的实现原理——BeanPostProcessor

Spring扩展分析_第3张图片

记住一定要交给Spring管理。
BeanPostProcessor中的 postProcessBeforeInitialization方法会在类实例化并且设置完属性之后调用,而 postProcessAfterInitialization会在 init方法调用之后调用。
现在写个例子来测试一下:

下面是一个Book类:

Spring扩展分析_第4张图片

开始测试:

Spring扩展分析_第5张图片

运行结果:

Spring扩展分析_第6张图片

请注意输出,你看到的不是一次 TestBeanPostProcessor相关方法的执行,而是三次,为什么?因为Spring也会初始化一些bean,在初始化这些Bean的时候也会调用实现 BeanPostProcessor的类的相应方法。

探讨ApplicationContextAware的实现原理——BeanPostProcessor的用处——实现代理

下面是一个BeanPostProcessor接口的类:

Spring扩展分析_第7张图片

请注意上面两个方法都返回另一个对象。
看看最后能不能返回LogDog2类型的对象。

Spring扩展分析_第8张图片

探讨ApplicationContextAware的实现原理——使用BeanPostProcessor实现ApplicationContextAware

定义一个接口:

Spring扩展分析_第9张图片

实现MyApplicationContextAware接口的Cat类:

Spring扩展分析_第10张图片

MyApplicationContextBeanPostProcessor

Spring扩展分析_第11张图片

这就是为什么只要实现一个接口就可以实现属性注入的原理:

Spring扩展分析_第12张图片

你可能感兴趣的:(Spring扩展分析)