spring aware 的个人理解
今天学习到了spring aware ,特地百度了下这方面的知识,现在谈下我的理解。
Spring的依赖注入的最大亮点就是你所有的Bean对Spring容器的存在是没有意识的。即你可以将你的容器替换成别的容器,例如Goggle Guice,这时Bean之间的耦合度很低。
但是在实际的项目中,我们不可避免的要用到Spring容器本身的功能资源,这时候Bean必须要意识到Spring容器的存在,才能调用Spring所提供的资源,这就是所谓的Spring Aware。其实Spring Aware本来就是Spring设计用来框架内部使用的,若使用了Spring Aware,你的Bean将会和Spring框架耦合。
-------------------------------------
ps:这段话很官(抽)方(象),我的理解是,spring aware 的这些接口的存在,让我们可以获取、修改beanName(getBeanName)、事件发布(applicationContext.publishEvent)等。具体场景,我暂时不了解,百度也找不到,估计是会在一些架构方面做文章吧。
spring aware 以下是几个常用的接口:
1、ApplicationContextAware 能获取Application Context调用容器的服务
2、BeanNameAware 提供对BeanName进行操作
3、ApplicationEventPublisherAware 主要用于事件的发布
4、BeanClassLoadAware 相关的类加载器
5、BeanFactoryAware 声明BeanFactory的
下面直接上代码:
定义一个Bean AwareSevice ,继承BeanNameAware 和ResourceLoaderAware接口
package com.abc.service; import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service; import java.io.IOException; @Service
public class AwareService implements BeanNameAware, ResourceLoaderAware { private String beanName;
private ResourceLoader resourceLoader; @Override
public void setBeanName(String s) {
this.beanName=s+"111";
} @Override
public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourceLoader=resourceLoader;
} public void outputResult() {
System.err.println("Bean名字是:" + beanName); Resource resource = resourceLoader.getResource("classpath:application.yml"); try {
System.err.println("resource加载的文件内容是:" + resource.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
}
可以看到,这里提供了setBeanName()和setResourceLoader(),用于设置BeanName和ResourceLoader。而我们没有继承这个的时候,用getBeanName()和getResourceLoader() 来获取的beanName和resourceLoader。
设置一个config,用来扫描这个包
package com.abc.config; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; @Configuration
@ComponentScan("com.abc.service")
public class AwareConfig {
}
调动service 的结果如下:

可以看到,这里的AwareService 的BeanName的确被改变了。(ps,就是不知道这样做实际上有什么意义)
spring aware 的个人理解的更多相关文章
- Spring Aware 到底是什么?
通过如下前序两篇文章: Spring Bean 生命周期之"我从哪里来"? Spring Bean 生命周期之"我要到哪里去"? 我们了解了 Spring Be ...
- Spring知识点回顾(08)spring aware
Spring知识点回顾(08)spring aware BeanNameAware 获得容器中的bean名称 BeanFactoryAware 获得当前的bean factory Applicatio ...
- Spring Boot实战笔记(五)-- Spring高级话题(Spring Aware)
一.Spring Aware Spring 依赖注入的最大亮点就是你所有的 Bean 对 Spring容器的存在是没有意识的.即你可以将你的容器替换成其他的容器,如Google Guice,这时 Be ...
- Spring Aware容器感知技术
Spring Aware是什么 Spring提供Aware接口能让Bean感知Spring容器的存在,即让Bean可以使用Spring容器所提供的资源. Spring Aware的分类 几种常用的Aw ...
- spring boot: spring Aware的目的是为了让Bean获得Spring容器的服务
Spring Aware的目的是为了让Bean获得Spring容器的服务 //获取容器中的bean名称import org.springframework.beans.factory.BeanName ...
- Spring Aware
spring依赖注入的最大亮点就是所有的bean感知不到spring容器的存在,但在实际开发中,我们不可避免的要用到spring容器本身的功能资源,这时,我们就必须意识到容器的存在(废话,都要跟容器进 ...
- spring扩展点之四:Spring Aware容器感知技术,BeanNameAware和BeanFactoryAware接口,springboot中的EnvironmentAware
aware:英 [əˈweə(r)] 美 [əˈwer] adj.意识到的;知道的;觉察到的 XXXAware在spring里表示对XXX感知,实现XXXAware接口,并通过实现对应的set-XXX ...
- Spring Aware获取Bean和其他对象
Spring的容器托管了所有bean,实际项目中我们经常会用到容器中的功能资源,这时候就用到了 Spring Aware.简单来说,就是Spring Aware可以帮助你获取到Spring容器中的Be ...
- Spring中IOC的理解
Spring中IOC的理解 1.什么是IOC? (1)控制反转.把对象创建和对象间的调用过程交给Spring进行管理. (2)使用IOC的目的:为了耦合度降低. 2.IOC底层原理? (1)xml解析 ...
随机推荐
- Java刷题时常用的标准库数据结构和相应算法
目录 一.线性表(广义的数组) 1. 数组 一维数组的定义和初始化 二维数组的定义和初始化 Arrays工具类的一些常用方法 2. List接口容器 对象的构建 读写和插入删除数据 排序 反转数组 二 ...
- 由浅入深--第一个MyBatis程序
话不多说,马上开始我们的第一个Mybatis程序: 第一个程序,当然要参考MyBatis的官网文档来搞,地址如下:https://mybatis.org/mybatis-3/zh/getting-st ...
- C#正则表达式(通俗易懂)
正则表达式有多重要,话不多说,直接入正题把. 首先我们来说说元字符. 1. . 点号代表除了换行意外的任意单个字符 例如 a.b 说明a和b之间只能有任意一个字符. 2.[]代表从这里面取出任意一个 ...
- Weisfeiler-Lehman(WL) 算法和WL Test
Weisfeiler-Lehman 算法 很多论文中会讲,从另一个角度来讲,GCN模型可以看作图上非常有名的 Weisfeiler-Lehman 算法的一种变形.那么什么是 Weisfeiler-Le ...
- 4.Profile(多环境配置)
在实际的项目开发中,一个项目通常会存在多个环境,例如,开发环境.测试环境和生产环境等.不同环境的配置也不尽相同,例如开发环境使用的是开发数据库,测试环境使用的是测试数据库,而生产环境使用的是线上的正式 ...
- 分布式系统下的CAP定理
本文参考EricBrewer博客加上自己的理解整理. CAP定理又被成为布鲁尔定理,是加州大学计算机科学家埃里克·布鲁尔提出来的猜想,后来被证明成为分布式计算领域公认的定理. CAP定义,在高并发的场 ...
- Qt:打包成可执行文件(exe文件)后出现Driver not Loaded的解决方法
问题 在当前电脑上打包为exe可以正常执行,发送给另一台电脑后却无法执行,并且出现"Driver not loaded"的提示框. 可能原因 1.另一台电脑上没有MySQL(或ex ...
- Python:numpy
学习自:NumPy 教程 | 菜鸟教程 官网:Numpy官方文档 1.简介 numpy主要用于数组计算,包含: 1)一个强大的N维数组对象ndarray 2)广播功能函数 3)整合 C/C++/For ...
- phpstrom2019版永久破解
前言 : 首先进入软件,如果软件需要激活才能进入,可以在idea.medeming.com/jets,中下载激活码,以方便进入 然后按照下面的步骤操作 1.下载补丁 链接:https://pan.ba ...
- keepalived yum安装后启动报错解决
[root@centos8 ~]yum install keepalived -y [root@centos8 ~]systemctl start keepalived.services [root@ ...