aware java_Spring中Aware接口说明
★
学习了上一章的 bean 生命周期,你会发现很多地方使用了 Aware 结尾的接口,那他们有什么用呢?
”
一、介绍
aware接口
aware,翻译过来是知道的,已感知的,意识到的,所以这些接口从字面意思应该是能感知到所有 Aware 前面的含义。
二、举例
光从上面的介绍很难理解他到底有什么作用,下面举个例子就能直观的知道 aware 的作用
先举个 BeanNameAware 的例子,实现 BeanNameAware 接口,可以让该 Bean 感知到自身的 BeanName(对应 Spring 容器的 BeanId 属性)属性
BeanNameAware 接口的定义
public interface BeanNameAware extends Aware {
void setBeanName(String name);
}
定义两个 User,一个实现 BeanNameAware,一个不实现。
User
package cn.gameboys.aware;
import org.springframework.beans.factory.BeanNameAware;
public class User implements BeanNameAware {
private String id;
private String name;
private String beanName;
@Override
public void setBeanName(String name) {
this.beanName = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", beanName=" + beanName + "]";
}
}
User2
package cn.gameboys.aware;
public class User2 {
private String id;
private String name;
private String beanName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", beanName=" + beanName + "]";
}
}
在 Spring 配置文件中初始化两个对象。
main 方法测试一下 BeanNameAware 接口所起的作用。
package cn.gameboys.aware;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public abstract class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("aware-test.xml");
User user = context.getBean(User.class);
System.out.println(String.format("实现了BeanNameAware接口的信息BeanId=%s,所有信息=%s", user.getId(), user.toString()));
User2 user2 = context.getBean(User2.class);
System.out.println(String.format("未实现BeanNameAware接口的信息BeanId=%s,所有信息=%s", user2.getId(), user2.toString()));
}
}
运行结果
实现了BeanNameAware接口的信息BeanId=66,所有信息=User [id=66, name=zhangsan, beanName=zhangsanBean]
未实现BeanNameAware接口的信息BeanId=77,所有信息=User [id=77, name=lisi, beanName=null]
能够看到,我们在实现了BeanNameAware的 User 中,获取到了 Spring 容器中的 BeanId(对应 spring 配置文件中的 id 属性),
而没有实现 BeanNameAware 的 User2,则不能获取到 Spring 容器中的 Id 属性。
三、结论
BeanNameAware 接口是为了让自身 Bean 能够感知到,获取到自身在 Spring 容器中的 id 属性。
其他的 Aware 接口也是为了能够感知到自身的一些属性。比如实现了ApplicationContextAware接口的类,能够获取到ApplicationContext,实现了BeanFactoryAware接口的类,能够获取到BeanFactory对象。
aware java_Spring中Aware接口说明相关推荐
- aware java_spring中一些aware接口
Spring中提供一些Aware相关接口,像是BeanFactoryAware. ApplicationContextAware.ResourceLoaderAware.ServletContextA ...
- Spring中Aware的用法以及实现
Aware 在Spring当中有一些内置的对象是未开放给我们使用的,例如Spring的上下文ApplicationContext.环境属性Environment,BeanFactory等等其他的一些内 ...
- C++中的接口(抽象类)
1.Cpp中的接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现.接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念.如果类中至少有一 ...
- Java中实现接口与继承的区别
** Java中实现接口与继承的区别 ** 首先,先来了解一下什么是接口和继承.接口一般是使用interface来定义的.接口定义同类的定义类似,分为接口的声明和接口体,其中接口体由常量定义和方法定义 ...
- Objective-C 入门(七)协议 protocol(JAVA中的接口)
Objective-C 入门(七)协议 protocol(JAVA中的接口) 接口的作用想必大家都比较了解 OV中的 protocol 相比接口作用相似 语法稍有不同 1.先来看声明一个协议 在创建文 ...
- Android中Parcelable接口用法
-- 通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象.也可以将Parcel看成是一个流,通过writeToPa ...
- Java中的接口命名[关闭]
本文翻译自:Interface naming in Java [closed] Most OO languages prefix their interface names with a capita ...
- 初步解读Golang中的接口相关编写方法
初步解读Golang中的接口相关编写方法 概述如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键.在Go语言的实际编程中,几乎所有的数据结构都围绕接口 ...
- Java6.0中Comparable接口与Comparator接口详解
Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...
最新文章
- 《C++代码设计与重用》——1.2 重用的神话
- 清华姚班校友陈丹琦斩获2022斯隆奖!「诺奖风向标」27位华人学者入选
- vue2.0 rem运行环境搭建
- hdu2846(2009多校第四场) 字典树
- CTO要我把这份MySQL规范贴在工位上!
- winform 与WPF
- oracle 自动表分析,Oracle自动分析索引,表
- python整数类型没有取值范围限制_详解Python中6种数据类型
- windows 禁用ipv6服务_Win7电脑禁用ipv6协议的方法是什么?
- Cross-Site Scripting(XSS): 跨站脚本攻击介绍
- 一篇文章带你搞懂观察者模式
- 入门系列之基于MATLAB的滚动轴承内外圈复合线性剥落故障动力学建模
- 增长黑客AB-Test系统(四)——AB-Test 最小样本量
- 最新财报发布+天猫618双榜第一,耐克蓄力领跑下个50年
- 回想那天让我虎躯一震的bug:Mybatis Ognl引起的异常
- STM32H7学习继续(STM32H7系列9) ADC
- Echarts双Y轴图表处理
- python经典教程_零基础 Python爬虫经典实战教程
- 关于Android开发的面试经验总结,妈妈再也不用担心我找工作了!
- C++虚函数实现机制
热门文章
- 策略服务器无法启动显示错误1053,启动Windows服务失败,出现错误1053
- 2022年,大厂都在招什么样的Linux运维?
- ios沙箱软件_ios真机和模拟器沙盒文件(一)
- 警方突袭德国间谍软件公司
- moment(‘time‘,‘YYYY-MM-DD HH:mm:ss‘)和moment(‘time‘).format(‘YYYY-MM-DD HH:mm:ss‘)的区别
- 【软件工程】《黑客与画家》系列08[完结]-设计与研究2(节选)
- 干燥季节应喝丝瓜蛋汤
- day-12函数进阶
- Mysql执行计划和Mysql优化
- C++ 创建数组并初始化