Spring5 底层原理 Aware 接口及 InitializingBean 接口(黑马)

Aware 接口

在Spring中,除了使用注解来进行依赖注入以外,还可以通过实现Aware接口来获取Spring容器的一些重要组件的实例。

其中,Aware接口属于Spring框架中的一个拓展接口,它定义了一些特定的方法,用于获取Spring容器中的一些组件实例。通过实现这些Aware接口,可以达到获取Spring容器中组件的目的。

例如下面的几个接口:

  • BeanNameAware:获取当前Bean在Spring容器中的name属性
  • BeanClassLoaderAware:获取当前Bean的类加载器
  • BeanFactoryAware:获取BeanFactory实例
  • ResourceLoaderAware:获取资源加载器
  • ServletContextAware:获取ServletContext对象
  • MessageSourceAware:获取MessageSource对象
    这些Aware接口可以帮助开发者快速获取Spring容器中需要的组件,使代码更加简洁和高效。

InitializingBean 接口

nitializingBean接口是Spring框架的一个拓展接口,可以用于在Bean初始化完成后,执行一些特定的操作。

通过实现InitializingBean接口,可以在Bean初始化完成后,进行一些统一的初始化操作,避免了在每个Bean内部进行初始化操作,提高了代码的复用性。

演示 - Aware 接口及 InitializingBean 接口

1.Aware 接口

  1. 在我们自己创建的MyBean上实现一个BeanNameAware接口
  2. 重写接口中抽象方法
  3. A06中注册MyBean.class查看运行结果

MyBean
在这里插入图片描述

A06
在这里插入图片描述
运行结果:
在这里插入图片描述
在这个我们注册的MyBean初始化之前就会调Aware接口中我们实现的方法,在我们的例子中获得了BeanName并打印日志,在实现其他的Aware接口操作也是一样的

InitializingBean 接口

第一步在我们自己创建的MyBean上实现一个InitializingBean接口,后面两部与上面一样
在这里插入图片描述
结果(先执行Aware接口重写的方法,在执行InitializingBean接口重写的方法)
在这里插入图片描述

问题:这些实现我们可以用注解完成,为什么还要有这些接口呢

有同学说: Aware接口实现的一些功能用 @Autowired 就能实现啊, 为啥还要用 Aware 接口呢
简单地说:
1. @Autowired 的解析需要用到 bean 后处理器, 属于扩展功能
2. 而 Aware 接口属于内置功能, 不加任何扩展, Spring 就能识别
某些情况下, 扩展功能会失效, 而内置功能不会失效

例1: 你会发现用 Aware 注入 ApplicationContext 成功, 而 @Autowired 注入 ApplicationContext 失败

我们在MyBean中加入利用@Autowired注入ApplicationContext 以及PostConstruct的演示带代码,再运行一下A06:在这里插入图片描述
结果会发现根本没有调用上面的代码,但是发现用 Aware 的方法以及 InitializingBean的方法任然生效

如果想要注解生效,我们还需要额外加后处理器(A06中):
在这里插入图片描述
在运行可以发现,利用注解的实现也打印出来了:
在这里插入图片描述

收获

  1. Aware 接口提供了一种【内置】 的注入手段,例如
    • BeanNameAware 注入 bean 的名字
    • BeanFactoryAware 注入 BeanFactory 容器
    • ApplicationContextAware 注入 ApplicationContext 容器
    • EmbeddedValueResolverAware 注入 ${} 解析器
  2. InitializingBean 接口提供了一种【内置】的初始化手段
  3. 对比
    • 内置的注入和初始化不受扩展功能的影响,总会被执行
    • 而扩展功能受某些情况影响可能会失效
    • 因此 Spring 框架内部的类常用内置注入和初始化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Aholic 冲冲冲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值