广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Spring的Aware接口你知道多少
  • 853
分享到

Spring的Aware接口你知道多少

2024-04-02 19:04:59 853人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

若 spring 检测到 bean 实现了 Aware 接口,则会为其注入相应的依赖。所以通过让bean 实现 Aware 接口,则能在 bean 中获得相应的 Spring 容器资

spring 检测到 bean 实现了 Aware 接口,则会为其注入相应的依赖。所以通过让bean 实现 Aware 接口,则能在 bean 中获得相应的 Spring 容器资源

Spring 中提供的 Aware 接口有:

  • BeanNameAware:注入当前 bean 对应 beanName
  • BeanClassLoaderAware:注入加载当前 bean 的 ClassLoader
  • BeanFactoryAware:注入 当前BeanFactory容器 的引用

BeanNameAwareBeanFactoryAware都属于org.springframework.beans.factory.Aware根标记接口。

其使用setter注入来在应用程序上下文启动期间获取对象。

Aware接口是回调,监听器和观察者设计模式的混合,它表示bean有资格通过回调方式被Spring容器通知。

1 BeanNameAware

使对象能够知道容器中定义的bean名称。

public class MyBeanName implements BeanNameAware {
    @Override
    public void setBeanName(String beanName) {
        System.out.println(beanName);
    }
}

beanName属性表示在Spring容器中注册的bean id,在我们的实现中,只是显示bean名称。

在Spring配置类中注册这种类型的bean:

@Configuration
public class Config {
    @Bean(name = "myCustomBeanName")
    public MyBeanName getMyBeanName() {
        return new MyBeanName();
    }
} 

启动应用程序上下文并从中获取bean:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
MyBeanName myBeanName = context.getBean(MyBeanName.class); 

setBeanName方法打印出了“myCustomBeanName”。

若从@Bean注解中删除name =“…”代码,则在这种情况下,将getMyBeanName()方法名称分配给bean,所以输出将是“getMyBeanName”。

2 BeanFactoryAware

用于注入BeanFactory对象,就能访问创建对象的BeanFactory。

public class MyBeanFactory implements BeanFactoryAware {
    private BeanFactory beanFactory;
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }
    public void getMyBeanName() {
        MyBeanName myBeanName = beanFactory.getBean(MyBeanName.class);
        System.out.println(beanFactory.isSingleton("myCustomBeanName"));
    }
}

在setBeanFactory()方法的帮助下,我们将ioc容器中的BeanFactory引用分配给beanFactory属性。

然后,我们可以像在getMyBeanName()函数中一样直接使用它。

初始化MyBeanFactory并调用getMyBeanName()方法:

MyBeanFactory myBeanFactory = context.getBean(MyBeanFactory.class);
myBeanFactory.getMyBeanName();

由于我们已经在前面的示例中实例化了MyBeanName类,因此Spring将在此处调用现有实例。

3 适用场景

获取bean名称以进行日志记录或埋点,对于BeanFactoryAware,它可以使用扩展代码中的spring bean。

大多数情况下,应避免使用任何Aware接口,因为实现这些接口会将代码耦合到Spring框架

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容! 

--结束END--

本文标题: Spring的Aware接口你知道多少

本文链接: https://www.lsjlt.com/news/139154.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring的Aware接口你知道多少
    若 Spring 检测到 bean 实现了 Aware 接口,则会为其注入相应的依赖。所以通过让bean 实现 Aware 接口,则能在 bean 中获得相应的 Spring 容器资...
    99+
    2022-11-13
  • 银行卡验证类的API接口,你知道多少?
    大家注意到没有?我们日常办理用的银行卡在注册办理时,银行方面总会要求我们提供身份证或手机号,这些资料就是用于验证个人身份信息的必要条件,也是银行卡多种要素必需信息。 银行卡验证类API接口 ...
    99+
    2023-10-23
    php sqlite Powered by 金山文档
  • Spring事务的失效场景你知道多少
    1、Spring事务最终依赖的数据库的事务,如果用的是mysql的话,执行引擎要是innodb;因为只有innoDB 支持事务。 2、Spring的事务是原理是aop,所以加事务所在...
    99+
    2022-11-13
  • 你知道Python、Spring和NumPy接口的优缺点吗?
    Python、Spring和NumPy是三个非常流行的开发框架,它们各自有着独特的优缺点。在本文中,我们将深入探讨Python、Spring和NumPy接口的优缺点,并且为您演示相关的代码。 Python接口的优缺点 Python是一种高级...
    99+
    2023-10-20
    spring numy 接口
  • Python的这些库,你知道多少?
    目录一、导读二、前戏三、Python标准库四、科学计算与统计五、数据处理与分析六、可视化七、机器学习、深度学习和强化学习八、自然语言处理一、导读 通常,开发大量原始代码是一个费时费力...
    99+
    2022-11-12
  • Java中的运算符你知道多少
    目录1.算术运算符1.基本的算数运算符:+ - * / %2.增量运算符**+= -= /= = %=*3.自增自减运算符 ++ – --2.关系运算符3.逻辑...
    99+
    2022-11-13
  • Node.js的基本应用你知道多少
    目录一、Node.js是什么1、浏览器的内核2、为什么要用node.js3、node.js应用程序的示例二、Node.js中的npm三、yarn包管理器四、REPL环境总结一、Nod...
    99+
    2022-11-13
  • jQuery的事件处理你知道多少
    目录一、jQuery的事件处理1、页面载入事件2、事件绑定(bind)3、反绑定事件(unbind)4、一次性事件绑定(one)5、模拟鼠标悬停(hover)总结一、jQuery的事...
    99+
    2022-11-13
  • java的正则表达式你知道多少
    字符x字符 x\\反斜线字符\0n带有八进制值 0 的字符 n (0 <= n <=&nb...
    99+
    2022-11-13
  • vue 的全选组件封装你知道多少
    效果  封装的组件 <template> <el-form-item :label="label"> <el-checkbox ...
    99+
    2022-11-13
  • Vue组件之间的通信你知道多少
    目录Vue组件间通信1.父向子传递数据1.props的大小写2.props的两种写法3.传递动态props2.子向父传递数据3.兄弟(任意)组件间的传值3.1全局事件总线3.2消息订...
    99+
    2022-11-13
  • React组件中的state和setState()你知道多少
    目录state的基本使用setState()修改状态解决方法:总结state的基本使用 状态(state)即数据,是组件内部的私有数据,只能在组件内部使用 state的值是对象,可以...
    99+
    2022-11-13
  • Python 与 npm 接口:你需要知道的一切
    Python 和 npm 是两个非常受欢迎的编程语言和包管理器。Python 是一种高级编程语言,它可以用于开发各种应用程序,包括桌面应用程序、网站、机器学习模型等。而 npm 是一个用于 Node.js 的包管理器,它可以让你轻松安装和...
    99+
    2023-07-22
    响应 npm 接口
  • Java的分支结构与循环你知道多少
    目录1.continue关键字2.双重循环总结1.continue关键字 continue :继续 适用场景:只能用在循环中 作用:表示跳出本次循环,继续执行下一次循环 break和...
    99+
    2022-11-13
  • python的变量和运算符你都知道多少
    目录python变量1. 定义变量 (创建变量)2.使用变量3.重新给变量赋值4. 同时定义多个变量5.定义变量和重新赋值变量的原理运算符1. 数学运算符2. 比较运算符:3. 逻辑...
    99+
    2022-11-13
  • 二维码在Python中的应用,你知道多少?
    二维码是近年来越来越流行的一种二维条码,它可以存储大量的信息,而且使用方便,只需要一部智能手机就可以扫描二维码获取信息。在Python中,我们也可以使用各种库来生成和解析二维码,下面就让我们来了解一下。 生成二维码 Python中最常...
    99+
    2023-08-29
    path 二维码 学习笔记
  • Python 同步接口 leetcode:你需要知道的一切!
    随着人工智能技术的发展,Python 成为了越来越多人工智能从业者的首选语言。而 leetcode 是一个极为受欢迎的算法题目网站,许多人都会在这里刷题来提高自己的算法水平。本文将为大家介绍 Python 同步接口 leetcode 的一...
    99+
    2023-10-23
    同步 接口 leetcode
  • PHP HTTP接口索引:你需要知道的一切。
    PHP HTTP接口索引:你需要知道的一切 在现代Web应用程序中,HTTP接口是一项非常重要的技术。PHP是一种流行的编程语言,也可以用来构建HTTP接口。本文将介绍PHP中的HTTP接口,包括如何创建和使用它们。 HTTP接口简介 HT...
    99+
    2023-08-12
    http 接口 索引
  • 从 Git 到 Java 接口:你需要知道的一切。
    从 Git 到 Java 接口:你需要知道的一切 Git 和 Java 接口都是现代软件开发中必不可少的工具。Git 是一个版本控制系统,而 Java 接口则是一种约束实现类的方式。本文将介绍 Git 和 Java 接口的基本概念和使用方法...
    99+
    2023-09-15
    接口 git javascript
  • ASP Windows对象接口:你需要知道的一切
    ASP(Active Server Pages)是一种基于服务器端的脚本语言,可用于生成动态网页。ASP支持多种编程语言,如VBScript、JavaScript等,它们都可以通过Windows对象接口来访问操作系统级别的功能。在本文中,...
    99+
    2023-08-29
    windows 对象 接口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作