javaspring学习疑惑(每天一个Java知识点)
javaspring学习疑惑(每天一个Java知识点)获得当前bean factory,这样可以调用容器的服务BeanFactoryAware:spring提供的aware接口如下:BeanNameAware:获得到容器中bean的名称
每天分享一个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文件,里面内容可以随意;
资源目录
文件内容
2. spring aware演示bean
演示bean
解释:
1. 实现BeanNameAware、ResourceLoaderAware接口,获得Bean名称和资源加载的服务;
2. 实现ResourceLoaderAware需重写setResourceLoader;
3. 实现BeanNameAware需重写setBeanName方法。
3. 配置类
配置类
4. 运行
运行
5. 结果
结果
Spring Aware的目的是为了让Bean获得spring容器的服务,因为ApplicationContext接口继承了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以bean继承ApplicationContextAware可以获得spring容器的服务,但原则上我们还是要用到什么接口就实现什么接口。
想获取完整面试题及答案的同学请点赞、关注并转发。私信楼主:“Java面试题”获取完整资料,更有超全spring、jvm、linux、docker等电子书相送。更有整理的200多页的面试重点知识点,非常全面,需要的私信。
其它文章:
每天分享一点Java知识(spring-aop)
每天一个Java知识点(spring-event)