温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Aware的原理和作用是什么

发布时间:2021-06-30 16:20:03 来源:亿速云 阅读:198 作者:chen 栏目:大数据

本篇内容主要讲解“Spring Aware的原理和作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Aware的原理和作用是什么”吧!

为什么要说 Spring Bean 生命周期又说 Aware 呢?下来点亮剩下内容你也许就明白了:

Spring Aware的原理和作用是什么

  1. 在 Spring Bean Ready for Use之前的起源当然是要调用构造器,所以 Constructor 毋庸置疑是创建 Spring Bean 的第一步

  2. 通过 Setter 方法完成依赖注入,SDI (Setter Dependency Injection)

  3. 依赖注入一旦结束,BeanNameAware.setBeanName() 会被调用,它设置该 bean 在 Bean Factory 中的名称

  4. 接下来调用 BeanClassLoaderAware.setBeanClassLoader() ,为 bean 实例提供类加载器,我们知道所有类都是要通过类加载器加载到上下文的,关于类的加载机制/双亲委派模型(大厂都爱问的面试题)内容会在后续给出来,让你透彻的了解

  5. 然后 BeanFactoryAware.setBeanFactory() 会被调用为 bean 实例提供其所拥有的 factory

关于 1、2 两点我要额外多说一些内容,请看下面代码: Spring Aware的原理和作用是什么

这里,我们尝试通过构造器访问自动注入的 field Environment env,当构造器被调用时,Spring Bean 还没被完全初始化,这就会导致 NullPointerExceptions; 我们变换一下方式: Spring Aware的原理和作用是什么

这种方式,Environment 实例被安全注入之后才调用 @PostConstruct标记的方法,这样就不会抛出 NullPointerException 了。

这会回看周期图,有没有豁然开朗?

敲黑板

等所有 Spring Bean 都完成依赖注入(周期图中的 Setter Methods 部分)再使用 bean 的引用才是安全的方式,

后续会有一个章节专门说一说面试经常被问起的 Spring 有几种依赖注入方式的尴尬问题,请关注后续文章

到这里终于可以说一说 Aware 了,且看

Aware

Spring Aware的原理和作用是什么

Aware 翻译过来可以理解为"察觉的;注意到的;感知的" ,XxxxAware 也就是对....感知的,没有 Aware 就是无感知的吗?对喽

Spring 的依赖注入最大亮点就是所有的 Bean 对 Spring 容器的存在是没有意识的,拿 Spring Bean 生命周期之“我从哪里来”? 文章中“小学生入少先队”为例子说明,小学生还是那个小学生,加入少先队还是加入共青团只不过规则不一样罢了 但是在实际项目中,我们不可避免的要用到 Spring 容器本身提供的资源(难免要有事情需要少先队组织的帮助),这时候要让 Bean 主动意识到 Spring 容器的存在,才能调用 Spring 所提供的资源,这就是 Spring Aware. 其实 Spring Aware 是 Spring 设计为框架内部使用的,若使用了,你的 Bean 将会和 Spring 框架耦合,所以自己不单独使用,但是在读框架源码时希望你不再模糊.

常见的 Spring Aware 接口

Aware子接口描述
BeanNameAware获取容器中 Bean 的名称
BeanFactoryAware获取当前 BeanFactory ,这样可以调用容器的服务
ApplicationContextAware同上,在BeanFactory 和 ApplicationContext 的区别 中已明确说明
MessageSourceAware获取 Message Source 相关文本信息
ApplicationEventPublisherAware发布事件
ResourceLoaderAware获取资源加载器,这样获取外部资源文件

来看类关系图: Spring Aware的原理和作用是什么

当然不止以上这些 Aware, 通常使用 Spring Aware 的目的是为了让 Bean 获得 Spring 容器的服务。

代码示例

BeanNameAware

自定义 bean 实现 BeanNameAware Spring Aware的原理和作用是什么

注册 bean Spring Aware的原理和作用是什么

运行 Spring Aware的原理和作用是什么

和预想一样,Bean Name 输出结果为 myCustomBeanName,如果移除掉 @Bean 注解的 name 属性, 输出结果为 getMyBeanName

总结

在大多数情况下,我们应该避免使用任何 Aware 接口,除非我们需要它们。实现这些接口会将代码耦合到Spring框架,但是希望看过本节内容之后阅读框架源码思维更加清晰

到此,相信大家对“Spring Aware的原理和作用是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI