【死磕 Spring】

  • 时间:
  • 浏览:1

而初始化 bean 对象时也是干了三件事情:

LoadTimeWeaverAware:加载Spring Bean时织入第三方模块,如AspectJ

doCreateBean() 办法主要干三件事情:

属性注入: populateBean()

MessageSourceAware:国际化

运行结果:



从该运行结果能并能看出,这里只执行了另一有一个 Aware 接口的 set 办法,原因分析分析 可是我我痛 getBean() 调用时在激活 Aware 接口时只检测了 BeanNameAware、BeanClassLoaderAware、BeanFactoryAware 另一有一个 Aware 接口。可能将测试办法调整为下面:

激活自定义的 init 办法

接下来三篇文章可能删剪分析这三件事情,这篇主要分析 Aware 接口。

激活 Aware 办法

BootstrapContextAware:资源适配器BootstrapContext,如JCA,CCI

后置防止器的应用

Aware 接口为 Spring 容器的核心接口,是另一有一个具有标识作用的超级接口,实现了该接口的 bean 是具有被 Spring 容器通知的能力,通知的办法是采用回调的办法。

ServletConfigAware:ServletConfig

Aware 接口是另一有一个空接口,实际的办法签名由各个子接口来选则,且该接口通常只会有另一有一个接收单参数的 set 办法,该 set 办法的命名办法为 set + 添加接口名中的 Aware 后缀,即 XxxAware 接口,则办法定义为 setXxx(),同类 BeanNameAware(setBeanName),ApplicationContextAware(setApplicationContext)。

ResourceLoaderAware:底层访问资源的加载器

Spring 提供了一系列的 Aware 接口,如下图(帕累托图):



顶端可是我我一帕累托图子类,从这里亲戚亲戚朋友能并能看多 Spring 提供的 Aware 接口是是何其多。共同从上图亲戚亲戚朋友也看多了几条比较熟悉的接口,如 BeanClassLoaderAware、BeanFactoryAware、BeanNameAware,下面就这另一有一个接口来做另一有一个简单的演示,先看该人的定义:

BeanFactoryAware:声明BeanFactory

Aware 的子接口必须提供另一有一个 setXxx 办法,亲戚亲戚朋友知道 set 是设置属性值的办法,即 Aware 类接口的 setXxx 办法其实可是我我设置 xxx 属性值的。 Aware 的含义是感知的、感应的,这麼在 Spring 容器中是何如实现感知并设置属性值得呢?亲戚亲戚朋友能并能从初始化 bean 中的激活 Aware 的办法 invokeAwareMethods() 中看多许多点,如下:



首先判断 bean 实例否有属于 Aware 接口的范畴,可能是话语,则调用实例的 setXxx() 办法给实例设置 xxx 属性值,在 invokeAwareMethods() 办法主可是我我设置 beanName,beanClassLoader、BeanFactory 中另一有一个属性值。

初始化 bean 对象: initializeBean()

实例化 bean 对象: createBeanInstance()

PortletConfigAware:PortletConfig

下面简单演示下顶端一有一个接口的使用办法:

NotificationPublisherAware:JMX通知

则运行结果如下:



从这了亲戚亲戚朋友基本上就能并能 Aware 真正的含义是几条了?感知,其实是 Spring 容器在初始化主动检测当前 bean 否有实现了 Aware 接口,可能实现了则回调其 set 办法将相应的参数设置给该 bean ,这一 前一天该 bean 就从 Spring 容器中取得相应的资源。最后文章末尾列出帕累托图常用的 Aware 子接口,便于如果查询:

PortletContextAware:PortletContext

原文发布时间为:2018-12-24

本文作者:chenssy

本文来自云栖社区合作办法办法伙伴“ Java技术驿站”,了解相关信息能并能关注“chenssy89”微信公众号

ServletContextAware:ServletContext

ApplicationEventPublisherAware:应用事件

BeanClassLoaderAware:加载Spring Bean的类加载器

BeanNameAware:声明Spring Bean的名字

Aware 接口定义如下:

测试办法如下: