
ApplicationListenerDetector监听器判断demo

目录
- Bean实例化之后
- Bean销毁之前
Bean实例化之后
判断Bean是否是监听器,如果是监听器就将当前Bean加入监听器集合
public Object postProcessAfterInitialization(Object bean, String beanName) { if (bean instanceof ApplicationListener) { // potentially not detected as a listener by getBeanNamesForType retrieval Boolean flag = this.singletonNames.get(beanName); if (Boolean.TRUE.equals(flag)) { // singleton bean (top-level or inner): register on the fly this.applicationContext.addApplicationListener((ApplicationListener<?>) bean); } else if (Boolean.FALSE.equals(flag)) { if (logger.isWarnEnabled() && !this.applicationContext.containsBean(beanName)) { // inner bean with other scope - can't reliably process events logger.warn("Inner bean '" + beanName + "' implements ApplicationListener interface " + "but is not reachable for event multicasting by its containing ApplicationContext " + "because it does not have singleton scope. Only top-level listener beans are allowed " + "to be of non-singleton scope."); } this.singletonNames.remove(beanName); } } return bean; }
Bean销毁之前
如果当前Bean是监听器,就将当前Bean从监听器集合中移除
public void postProcessBeforeDestruction(Object bean, String beanName) { if (bean instanceof ApplicationListener) { try { ApplicationEventMulticaster multicaster = this.applicationContext.getApplicationEventMulticaster(); multicaster.removeApplicationListener((ApplicationListener<?>) bean); multicaster.removeApplicationListenerBean(beanName); } catch (IllegalStateException ex) { // ApplicationEventMulticaster not initialized yet - no need to remove a listener } } }
以上就是ApplicationListenerDetector监听器判断demo的详细内容,更多关于ApplicationListenerDetector监听器的资料请关注我们其它相关文章!
相关推荐
-
Springboot整合zookeeper实现对节点的创建、监听与判断的案例详解
目录 Springboot整合zookeeper教程 1.环境准备 2.代码编写 2.1.在pom.xml文件中增加zookeeper依赖(记得跟自己的zookeeper版本对应) 2.2.API测试 3.全部代码 Springboot整合zookeeper教程 1.环境准备 zookeeper集群环境 一个简单的springboot项目环境 不懂如何搭建zookeeper集群的小伙伴可以移步到我的另一篇文章喔,里面有详细的zookeeper集群搭建教程~ zookeeper集群搭建步骤(超详细
-
SpringBoot利用切面注解及反射实现事件监听功能
目录 前言 效果图 监听原理 核心源码 源码地址 前言 当某个事件需要被监听的时候,我们需要去做其他的事前,最简单的方式就是将自己的业务 方法追加到该事件之后. 但是当有N多个这样的需求的时候我们都这样一个个去添加修改事件的源码吗? 这篇文章将告诉你如何用一个注解,就可以将你的业务代码通过切面的方式添加到事件的前后,而不需要修改事件的代码 效果图 如下图所示,add方法内并没有调用其他的方法,但是其他方法仍然被执行了. 只要给监听方法加@AddEventListener()注解就可以让它在事件前
-
Spring事件监听机制观察者模式详解
目录 前言 观察者模式 观察者的角色定义 Java中的事件机制 Spring中的事件机制 Spring事件监听案例 小结 前言 Spring中提供了一套默认的事件监听机制,在容器初始化时便使用了这套机制.同时,Spring也提供了事件监听机制的接口扩展能力,开发者基于此可快速实现自定义的事件监听功能. Spring的事件监听机制是在JDK事件监听的基础上进行的扩展,也是在典型观察者模式上的进一步抽象和改进.所以,结合Spring的事件监听机制与观察者模式来学习,可以达到理论与实践的完美融合. 本
-
SpringBoot中使用Redis Stream实现消息监听示例
目录 Demo环境 仓库地址 POM依赖 配置监听消息类 监听俩个stream的实现 [问题补充]确认完消息删除消息 [问题补充]自动初始化stream的key和group问题-最新更新-2021年12月4日 Demo环境 JDK8 Maven3.6.3 springboot2.4.3 redis_version:6.2.1 仓库地址 https://gitee.com/hlovez/redismq.git. POM依赖 <?xml version="1.0" encoding=
-
java监听器的实现和原理详解
前言 监听器,字面上的理解就是监听观察某个事件(程序)的发生情况,当被监听的事件真的发生了的时候,事件发生者(事件源) 就会给注册该事件的监听者(监听器)发送消息,告诉监听者某些信息,同时监听者也可以获得一份事件对象,根据这个对象可以获得相关属性和执行相关操作. 监听器模型涉及以下三个对象,模型图如下: (1)事件:用户对组件的一个操作,或者说程序执行某个方法,称之为一个事件,如机器人程序执行工作. (2)事件源:发生事件的组件就是事件源,也就是被监听的对象,如机器人可以工作,可以跳舞,那么就可
-
php判断电子邮件是否正确方法
PHP判断电子邮件是否正确即是否有效,是我们PHP面试过程中常见考题之一.我们可以使用PHP过滤器来实现判断. 下面我们就通过具体示例,给大家介绍PHP判断电子邮箱是否正确的简单实现方法. 代码如下: <?php $email = "demo@example.com"; if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo '"' . $email . '" 是有效的.'; } else { echo '&
-
Node.js API详解之 dgram模块用法实例分析
本文实例讲述了Node.js API详解之 dgram模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 dgram dgram模块提供了 UDP 数据包 socket 的实现. 使用以下方式引用: const dgram = require('dgram'); dgram.createSocket(options[, callback]) 说明: 创建一个 dgram.Socket 对象. 一旦创建了套接字,调用 socket.bind() 会指示套接字开始监听数据报消息
-
Spring启动流程refresh()源码深入解析
一.Spring容器的refresh() spring version:4.3.12 ,尚硅谷Spring注解驱动开发-源码部分 //refresh():543, AbstractApplicationContext (org.springframework.context.support) public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdo
-
JS获取整个页面文档的实现代码
唯一需要注意的地方: innerText与textContent,显示页面的时候不能用innerHTML,否则会被解析.innerText与textContent是在除FF之外的浏览器与FF之间的差异. 复制代码 代码如下: var innerText = document.body.innerText ? 'innerText' : 'textContent'; 上面的语句在开头处理以避免多次判断 demo贴图: demo: 复制代码 代码如下: <!DOCTYPE html PUBLIC &qu
-
JavaWeb监听器Listener实例解析
首先来介绍一下什么是监听器: 监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听另外一个类的方法调用. 这是使用观察者模式的. 什么是观察者模式: 定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新. 示例: GUI编程中的addXxxxListener都是观察者模式. 比如为按钮点击添加监听事件,为键盘添加监听等等- 观察者模式的三个重要类: 被监听的事件源,也就是我们在使用的对象. 注册的那个监听器,是专门用来监听当前使用的对象的.
-
Android实现仿淘宝购物车增加和减少商品数量功能demo示例
本文实例讲述了Android实现仿淘宝购物车增加和减少商品数量功能.分享给大家供大家参考,具体如下: 在前面一篇<Android实现的仿淘宝购物车demo示例>中,小编简单的介绍了如何使用listview来实现购物车,但是仅仅是简单的实现了列表的功能,随之而来一个新的问题,买商品的时候,我们可能不止想买一件商品,想买多个,或许有因为某种原因点错了,本来想买一件来着,小手不小心抖了一下,把数量错点成了三个,这个时候就涉及到一个新的功能,那就是增加和减少商品的数量,今天这篇博文,小编就来和小伙伴们
-
Java Swing中JList选择事件监听器ListSelectionListener用法示例
本文实例讲述了Java Swing中JList选择事件监听器ListSelectionListener用法.分享给大家供大家参考,具体如下: 当JList中的元素被选中时,选择事件将被触发.对于JTable也是一样,你可以把它看做是多个并列的JList.那么,如果程序需要对该事件做出响应,需要以下步骤: (1)创建一个实现了 ListSelectionListener的监听器: (2)使用JList或selectionModel的addListSelectionListener添加监听器: (3
-
android 仿微信demo——登录功能实现(移动端)
移动端登录功能实现 登录功能基本和注册一样,唯一不同的是登录可以实现两种登录方式(微信号和手机号),也就是布局不一样.所以需要两个布局,两个activity(这个方法比较简单粗暴,我懒.也可以通过activity动态切换布局,这样只需要一个activity就可以了) 创建两个activity,实现两种登录方式 微信号登录activity LoginUser.java package com.example.wxchatdemo; import android.annotation.Suppres
-
Flutter手势密码的实现示例(附demo)
目录 前言 开始 绘制圆点 绘制手势路径 组合9个圆点盘和手势路径 手势密码组件的使用 上传自定义组件到pub仓库 后记 前言 本篇记录的是使用Flutter完成手势密码的功能,大致效果如下图所示: 该手势密码的功能比较简单,下面会详细记录实现的过程,另外还会简单说明如何将该手势密码作为插件发布到pub仓库. 开始 实现上面的手势密码并不难,大致可以拆分成如下几部分来完成: 绘制9个圆点 绘制手指滑动的线路 合并以上两个部分 绘制圆点 我们使用面向对象的方式来处理9个圆点的绘制,每个圆点作为一个
随机推荐
- 实例详解AngularJS实现无限级联动菜单
- 正则表达式之 Unicode 匹配特殊字符
- 编写高质量代码改善C#程序——使用泛型集合代替非泛型集合(建议20)
- 通过RadioButton对DataList控件进行单选实例说明
- js用类封装pop弹窗组件
- 在线演示常用javascript特效
- Python和GO语言实现的消息摘要算法示例
- MySQL中表子查询与关联子查询的基础学习教程
- 微信小程序 页面跳转事件绑定的实例详解
- node.js中debug模块的简单介绍与使用
- Android自定义View构造函数详解
- Powershell获取环境变量的方法
- Lua检测数组(tabble)中是否包含某个值
- 日历查询的算法 如何计算某一天是星期几
- sql2000数据库清除重复数据的二种方法
- CentOS 7.2部署邮件服务器(Postfix)
- jQuery动画animate方法使用介绍
- web开发人员学习jQuery的6大理由及jQuery的优势介绍
- 预防PHPDDOS的发包攻击别人的方法(iis+linux)
- 关于mysql 的时间类型选择
其他
- python 已知点求直线
- vmware15网络配置桥接
- win10 docker 宿主机互通
- Oracle 迁移达梦部分数据乱码
- python 复杂对象转json字符串
- pyqt5按钮添加背景
- 青龙面板傻妞机器人老是登陆有风
- go map扩容策略是什么
- postgresql 通过查询结果更新数据
- vue Echarts柱状图 横向 堆叠阴影
- urlencodedformentity详解
- antd table查询条件级联
- laravel try catch捕获不到异常
- go如何嵌入可执行程序
- 安卓开发 split根据.去分割
- php和go对称加密
- 微信小程序 获取函数返回值
- mysql-5.7.24环境变量怎么配置
- mysql8.0 命令 密码带&怎么处理
- 4行5列的二维数组沿1轴平均分割成2个子数组