【死磕 Spring】

  • 时间:
  • 浏览:1
  • 来源:神彩大发快3_彩神大发快3官方

下面简单演示下上端八个接口的使用土办法:

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



上端可是我一帕累托图子类,从这里让我们 都让我们 都并能看到 Spring 提供的 Aware 接口是是何其多。一起从上图让我们 都让我们 都也看到了十几个 比较熟悉的接口,如 BeanClassLoaderAware、BeanFactoryAware、BeanNameAware,下面就这有八个接口来做有八个简单的演示,先看人个所有的定义:

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

MessageSourceAware:国际化

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

ServletConfigAware:ServletConfig

BeanNameAware:声明Spring Bean的名字

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

Aware 的子接口都要提供有八个 setXxx 土办法,让我们 都让我们 都知道 set 是设置属性值的土办法,即 Aware 类接口的 setXxx 土办法着实 可是我设置 xxx 属性值的。 Aware 的含义是感知的、感应的,那么在 Spring 容器中是怎样才能实现感知并设置属性值得呢?让我们 都让我们 都并能从初始化 bean 中的激活 Aware 的土办法 invokeAwareMethods() 中看到某些点,如下:



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

NotificationPublisherAware:JMX通知

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

本文作者:chenssy

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

BeanClassLoaderAware:加载Spring Bean的类加载器

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

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

测试土办法如下:

运行结果:



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

PortletContextAware:PortletContext

BeanFactoryAware:声明BeanFactory

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

Aware 接口定义如下:

属性注入: populateBean()

激活 Aware 土办法

PortletConfigAware:PortletConfig

接下来三篇文章原因详细分析这三件事情,这篇主要分析 Aware 接口。

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

实例化 bean 对象: createBeanInstance()

初始化 bean 对象: initializeBean()

激活自定义的 init 土办法

则运行结果如下:



从这了让我们 都让我们 都基本上就并能 Aware 真正的含义是哪十几个 了?感知,着实 是 Spring 容器在初始化主动检测当前 bean 是否是实现了 Aware 接口,原因实现了则回调其 set 土办法将相应的参数设置给该 bean ,你这些完后 该 bean 就从 Spring 容器中取得相应的资源。最后文章末尾列出帕累托图常用的 Aware 子接口,便于后后查询:

ApplicationEventPublisherAware:应用事件

后置外理器的应用

ServletContextAware:ServletContext