每天分享一个Java知识点,码字不易,喜欢的可以关注一波,共同学习。20191129

今天的知识点是:Spring-Aware

我们知道,spring的依赖注入的最大亮点就是你所有的bean对spring容器的存在是没有意识的。即:你可以将你的容器替换成别的容器,比如Google Guice,这时bean之间的耦合度很低。但是在实际项目中,你不可避免要用到spring容器本身提供的功能资源,这时你的Bean必须意识到spring容器的存在,才能调用spring所提供的资源,这就是所谓的spring aware。

其实spring aware本来就是spring设计用来框架内部使用的,若使用了spring aware,你的bean会和spring耦合。

spring提供的aware接口如下:

BeanNameAware:

获得到容器中bean的名称

BeanFactoryAware:

获得当前bean factory,这样可以调用容器的服务

ApplicationContextAware*:

当前的application context,这样可以调用容器的服务

MessageSourceAware:

获得message source,这样可以获得文本信息

ApplicationEventPublisherAware:

应用事件发布器,可以发布事件

ResourLoaderAware:

获得资源加载器,可以获得外部资源文件

代码实例:

1. 准备。在aware包下新建一个text.txt文件,里面内容可以随意;

java的有关常识(每天一个Java知识点)(1)

资源目录

java的有关常识(每天一个Java知识点)(2)

文件内容

2. spring aware演示bean

java的有关常识(每天一个Java知识点)(3)

演示bean

解释:

1. 实现BeanNameAware、ResourceLoaderAware接口,获得Bean名称和资源加载的服务;

2. 实现ResourceLoaderAware需重写setResourceLoader;

3. 实现BeanNameAware需重写setBeanName方法。

3. 配置类

java的有关常识(每天一个Java知识点)(4)

配置类

4. 运行

java的有关常识(每天一个Java知识点)(5)

运行

5. 结果

java的有关常识(每天一个Java知识点)(6)

结果

Spring Aware的目的是为了让Bean获得spring容器的服务,因为ApplicationContext接口继承了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以bean继承ApplicationContextAware可以获得spring容器的服务,但原则上我们还是要用到什么接口就实现什么接口。

想获取完整面试题及答案的同学请点赞、关注并转发。私信楼主:“Java面试题”获取完整资料,更有超全spring、jvm、linux、docker等电子书相送。更有整理的200多页的面试重点知识点,非常全面,需要的私信。

其它文章:

每天分享一点Java知识(spring-aop)

每天一个Java知识点(spring-event)

,