【Spring Boot】Spring基础 —— Spring Aware

2024-03-30 12:58
文章标签 java 基础 spring boot aware

本文主要是介绍【Spring Boot】Spring基础 —— Spring Aware,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Spring Aware


文章目录

      • 1.概述
      • 2.建立包和相关文件
      • 3.定义用于演示的Bean
      • 4.定义配置类
      • 5.定义测试主类
      • 6.测试




1.概述

Spring的依赖注入的最大亮点就是你所有的Bean对Spring容器的存在是没有意识的。即你可以将你的容器替换成别的容器,如Google Guice,这时Bean之间的耦合度很低。

但是在实际项目中,你不可避免的要用到Spring容器本身的功能资源,这时你的Bean必须要意识到Spring容器的存在,才能调用Spring所提供的资源,这就是所谓的Spring Aware。其实Spring Aware本来就是Spring设计用来框架内部使用的,若使用了Spring Aware,你的Bean将会和Spring框架耦合。

Spring提供的Aware接口如下表所示。
Alt
Spring Aware的目的是为了让Bean获得Spring容器的服务。因为ApplicationContext接口集成了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以Bean继承ApplicationContextAware可以获得Spring容器的所有服务,但原则上我们还是用到什么接口,就实现什么接口。

下面我们通过一个实际例子来实用一下上表中的BeanNameAware和ResourceLoaderAware接口




2.建立包和相关文件

首先我们在 “src/main/java/com/study/spring/” 下建立一个新的包"ch3.aware",然后在这个包下再新建3个类;同时,在resources下也建立同样的文件结构"com/study/spring/ch3/aware",并在其中建立一个测试文件"test.txt",内容随意,我写的内容为:

this is a test file for aware
and this is the second row

整个项目的结构如下图所示:
Alt



3.定义用于演示的Bean

类AwareService的内容如下:

package com.study.spring.ch3.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;public void setBeanName(String name) {                                  //实现BeanNameAware需重写setBeanName方法this.beanName=name;}public void setResourceLoader(ResourceLoader resourceLoader) {          //实现ResourceLoaderAware需重写setResourceLoaderthis.loader=resourceLoader;}public void outputResult(){System.out.println("Bean的名称为:"+beanName);Resource resource = loader.getResource("com/study/spring/ch3/aware/test.txt");try{System.out.println("ResourceLoader加载的文件内容为:"+ IOUtils.toString(resource.getInputStream()));}catch(IOException e){e.printStackTrace();}}
}



4.定义配置类

配置类AwareConfig的内容如下:

package com.study.spring.ch3.aware;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan("com.study.spring.ch3.aware")
public class AwareConfig {
}



5.定义测试主类

测试主类Main的内容如下:

package com.study.spring.ch3.aware;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {public static void main(String[] args){AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AwareConfig.class);AwareService awareService = context.getBean(AwareService.class);awareService.outputResult();context.close();}
}



6.测试

选择刚刚建立的测试主类Main文件,右键,在弹出的窗体中选择"Run",效果如下:
Alt
结果表明,通过实现BeanNameAware和ResourceLoaderAware接口能够分别获取到当前容器中的Bean名称和取得外部资源文件。




这篇关于【Spring Boot】Spring基础 —— Spring Aware的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861544

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis