Spring Boot实战笔记(五)-- Spring高级话题(Spring Aware)
一、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 应用事件发布器,可以发布事件,前面提到的 DemoPulisher 也可实现这个接口来发布事件
- ResourceLoaderAware 获得资源加载器,可以获得外部资源文件
Spring Aware的目的是为了让 Bean 获得 Spring 容器的服务。因为 ApplicationContext 接口集成了 MessageSource接口、ApplicationEventPublisher接口 和 ResourceLoader接口,所以Bean继承 ApplicationContextAware 就可以获得Spring容器的所有服务,但原则上o们还是用到什么接口,就实现什么接口。
示例:
1.准备。在aware文件下新建一个test.txt,内容随意,给下面的外部资源加载使用
2.Spring Aware演示Bean
package com.ecworking.aware; import org.apache.commons.io.IOUtils;
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{ // 实现BeanNameAware和ResourceLoaderAware接口,获得Bean名称和资源加载的服务 private String beanName; private ResourceLoader loader; @Override
public void setBeanName(String beanName) { // 实现BeanNameAware需重写setBeanName方法
this.beanName = beanName;
} @Override
public void setResourceLoader(ResourceLoader loader) { // 实现ResourceLoaderAware需重写setResourceLoader方法
this.loader = loader;
} public void outputResult(){
System.out.println("Bean的名称为:" + beanName); Resource resource = loader.getResource("classpath:com/ecworking/aware/test.txt"); try {
System.out.println("ResourceLoader加载的文件内容为:" + IOUtils.toString(resource.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.配置类
package com.ecworking.aware; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; @Configuration
@ComponentScan("com.ecworking.aware")
public class AwareConfig {
}
4.运行
package com.ecworking.aware;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AwareConfig.class);
AwareService service = context.getBean(AwareService.class);
service.outputResult();
context.close();
}
}
运行结果:

Spring Boot实战笔记(五)-- Spring高级话题(Spring Aware)的更多相关文章
- Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践
我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...
- Spring Boot实战笔记(一)-- Spring简介
一.Spring 概述 Spring框架是一个轻量级的企业级开发的一站式解决方案.所谓的解决方案就是可以基于Spring解决所有的Java EE开发的所有问题. Spring框架主要提供了Ioc(In ...
- JavaEE开发的颠覆者 Spring Boot实战--笔记
1.Spring boot的三种启动模式 Spring 的问题 Spring boot的特点,没有特别的地方 1.Spring 基础 PS:关于spring配置 PS: 现在都已经使用 java配置, ...
- Spring Boot实战笔记(二)-- Spring常用配置(Scope、Spring EL和资源调用)
一.Bean的Scope Scope描述的是Spring容器如何新建Bean实例的.Spring的Scope有以下几种,通过@Scope注解来实现. (1)Singleton:一个Spring容器中只 ...
- Spring Boot学习笔记(五)整合mybatis
pom文件里添加依赖 <!-- 数据库需要的依赖 --> <dependency> <groupId>org.mybatis.spring.boot</gro ...
- spring boot 实战笔记(一)
spring 概述: Bean :每一个被 Spring 管理的 JAVA对象,都称之为 Bean.Spring提供一个IoC容器来初始化对象,负责创建Bean, 解决对象之间的依赖管理和对象的使用. ...
- spring boot学习笔记(二)创建spring boot项目
用eclipse(需要用高版本,要不然弄不出来):new →Spring Sarter Project 用IDEA:一般默认 一般默认 入门级的先 剩下的一般默认... 一.项目至少有下面的东西,里面 ...
- Spring Boot实战笔记(七)-- Spring高级话题(计划任务)
一.计划任务 从Spring3.1开始,计划任务在Spring中的实现变得异常的简单.首先通过在配置类注解@EnableScheduling来开启对计划任务的支持,然后在执行计划任务的方法上注解@Sc ...
- Spring Boot实战笔记(九)-- Spring高级话题(组合注解与元注解)
一.组合注解与元注解 从Spring 2开始,为了响应JDK 1.5推出的注解功能,Spring开始大量加入注解来替代xml配置.Spring的注解主要用来配置注入Bean,切面相关配置(@Trans ...
随机推荐
- ORM对象关系映射之GreenDAO高级用法
CRUD 增加: dao.insert(Student entity);//添加一个 dao.insertInTx(Student... entity);//批量添加 删除: dao.deleteBy ...
- 总结C语言在嵌入式开发中应用的知识点(文件数据的加密与解密)
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- 【linux学习笔记之一】linux系统目录结构以及常用系统命令
序 ???这破笔记也要序?? 昨天开始学linux,做好笔记以备日后翻阅 Linux系统目录结构图 bin --主要用于存放二进制文件(如:命令文件) boot--引导目录 dev --设备目录 ...
- 第十一章 图像之2D(2)
Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621 作者:宋志辉 出处:http://blog.csdn.net/song19891121 本文版权归作 ...
- GROUP BY,WHERE,HAVING间的区别和用法
having子句与where都是过滤语句. where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行 ...
- shell脚本里面相互调用时路径不要用pwd获取
shellA调用shellB,如果shellB 里面需要使用路径作为变量,去寻找其它文件.那么要注意,不用pwd,其返回的是系统中用户当前所在位置的路径,也就是shellA的路径,这样就错了.应该用d ...
- 关于SharePoint2007简单随感
首先,还是要感谢我毕业以后的这第一份正式工作,当然现在也依然在做,带我走进了SharePoint的世界,很奇妙也许是有缘吧,自己不是个努力的人,从面试的时候对Moss这个东西闻所未闻,到现在一知半解, ...
- Ubuntu安装java的最简单的命令行方式
由于经常要安装java,因此 深受其烦! 分为两部: 1. sudo apt-get install openjdk-7-jdk 2. sudo vim /etc/environment 然后把下面的 ...
- ORM框架--GreenDao 3.0基本使用指南
0. ORM框架--GreenDao 3.0基本使用指南 1. Gradle 的配置 这里可以参照官方的文档进行最新的配置(本示例的版本等你看到可能就不是最新的了),但是值得注意的一点是,GreenD ...
- nodejs+express blog项目分享
项目简介:项目采用nodejs+express+typescript+mongodb技术搭建 主要功能: 1.用户注册 2.用户登录 3.文章管理模块 4.图片管理模块 5.token认证 6.密码加 ...