AOP--@DeclareParents--引入新功能

news2024/11/25 4:42:09

目录

引入

解析

示例


  • 引入

  • Java不是动态语言;一旦类编译完成了,我们就很难再为该类添加新的功能了
  • 切面能够为现有的方法增加额外的功能,为什么不能为一个对象增加新的方法呢?
  • 实际上,利用被称为引入的AOP概念,切面可以为Spring bean添加新方法
  • 解析

  • 在Spring中,切面只是实现了它们所包装bean相同接口的代理
  • 如果除了实现这些接口,代理也能暴露新接口的话,会怎么样呢?
  • 那样的话,切面所通知的bean看起来像是实现了新的接口,即便底层实现类并没有实现这些接口也无所谓
  • 如图展示了它们是如何工作的:

  • 使用Spring AOP,我们可以为bean引入新的方法
  • 代理拦截调用并委托给实现该方法的其他对象
  • 需要注意的是,当引入接口的方法被调用时,代理会把此调用委托给实现了新接口的某个其他对象
  • 实际上,一个bean的实现被拆分到了多个类中
  • @DeclareParents 注解,它可以在代理目标类上增加新的行为(新增新的方法)
  • @DeclareParents 注解由三部分组成:
    • value属性指定了哪种类型的bean要引入该接口(标记符后面的加号表示是接口的所有子类型,而不是接口本身)
    • defaultImpl属性指定了为引入功能提供实现的类
    • @DeclareParents 注解所标注的静态属性指明了要引入了接口
  • 示例

  • 被代理的bean:

  • 代理增强类:

  • 代理类配置:

  • 启用AspectJ自动代理:

  • 测试类:

  • 结果为:

  • 有的人会问为什么不直接在原始的接口中新加方法
  • 当然这种也是可以的,但是这样做有个问题,加入原始接口下面有好多实现类,则需要对所有的实现类进行修改
  • 这样做功能能够完成,但是从设计角度来看并不是最好的做法
  • 况且有的时候根本没有机会修改所有的实现类,比如假如引用的原始类是第三方提供的并且没有源码
  • 这种情况就没有办法通过直接扩展原始类来解决问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从数据开始,构建值得信赖的生成式AI应用

生成式AI有望从根本上打开新世界机遇的大门:从能够个性化回复的对话式聊天机器人,到各种应用的代码,再到营销传播的定制化内容......生成式AI正在彻底改变企业的运作方式。越来越多的领先企业正在构建可信的生成式AI应用,让它们在…

信息共享、管理协作!工程劳务管理模板让企业内部更加通畅

随着建筑行业的快速发展,工程劳务管理变得越来越复杂,同时企业也需要更加高效地管理劳务人员的信息、工资、考勤等方面。因此,工程劳务管理系统应运而生,帮助企业解决这些问题。作为一款低代码开发平台,百数根据市面上…

面向 MSP 的IT管理

MSP(管理服务提供商)是通过建立自己的网络运作中心(NOC,Network Operating Center)来实施管理服务的。用户的网络通过WAN与MSP的NOC相连,并使用加密技术保证信息在网络上的传输安全。通过NOC,MSP可以实现远程的管理、实…

LVS负载均衡群集----DR部署

文章目录 一、数据包流向分析二、DR模式的特点三、LVS-DR中的ARP问题四、LVS单网段DR模式部署第一步配置负载调度器第二步设置两台节点服务器第三步设置DR 服务器第四步在本地查看调度服务器 一、数据包流向分析 (1)客户端发送请求到 Director Server&a…

前后端 java 对接海康威视监控-hls实现h5播放

海康的获取监控预览流的接口当中支持 rtsp、rtmp、hls等协议。 这篇文章主要是说hls协议的。 贴上海康的开发平台地址,其中有对应的API:海康开发平台 1、java层面代码 这里除了main方法之外,有两个方法,分别是: 1&am…

【Python】一文教你如何使用 Requests 库

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

审视自己再出发,在职读研从人民大学与加拿大女王大学金融硕士项目起航

有人说,人生并非一帆风顺。是的,在人生的道路上,总会出现各种各样的麻烦。或者认真学习不见成效,或是努力工作得不到赏识。人生中最困难的事情就是审视自己,当我们意识到自己需要提升时,往往是拥有强大能量…

【Linux】线程分离和线程互斥

终于到线程互斥了~ 文章目录 前言一、线程分离 如何理解线程库和线程ID二、线程互斥总结 前言 在上一篇文章中我们学习了线程控制,比如创建一个线程,取消一个线程以及等待线程,这篇文章我们讲两个非常重要的概念,一个是线…

CDH 之 hive 升级至 hive-3.1.3 完美踩坑过程

一、准备工作 1.1 前言 这是博主在升级过程中遇到的问题记录,大家不一定遇到过,如果不是 CDH 平台的话,单是 hive 服务升级应该是不会有这些问题的,且升级前博主也参考过几篇相关 CDH 升级 hive 服务的博文,前面的升级…

go语言操作以太坊智能合约

操作中要注意版本问题 geth版本、golang版本等 在remix环境中写好合约后,进行编译得到abi文件 简单举例 Hello.sol合约 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0;contract Hello {string Msg;function setMsg(string memory _msg) public{Msg_msg…

SM2密码算法规范介绍

目录 1、SM2的密钥对 1.1、SM2公钥 1.2、SM2私钥 2、密钥数据格式 2.1、 GMT0009 2.2、 GMT0016 2.3、 GMT0018 3、加密数据格式 3.1、GMT0009 3.2、GMT0016 3.3、GMT0018 4、签名数据格式 4.1、GMT0009 4.2、GMT0016 4.3、GMT0018 1、SM2的密钥对 1.1、SM2公钥…

java版DVD影碟片出租赁系统C/S模式 java电影购票系统课程设计

系统采用c/s架构,当然,你可以服务端、客户端都在同一台电脑上运行; 也可以在同一局域网内服务端、客户端在其它不同电脑上运行; 如果你有云服务器,可将Service端代码部署至云服务器上,客户端在任何一台有…

不愧是阿里P8出手的并发编程笔记!颠覆了我以往“正确“的认知

对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一。因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,更为考验一个程序员的内功。 那到底应该怎么学习并发编程…

浅析给水管网动态水力建模数据及其管理

摘要:给水管网在城市生产及生活中发挥着十分重要的作用,所以,保证其正常运行便显得尤为必要了。本文将基于给水管网动态水力建模数据及其管理展开相应的分析,以期促进城市给水管网运行质量的提高,为同行提供一些有益的…

HTML4

前序知识 认识两位先驱 计算机基础知识 计算机俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算、逻辑计算,还具有存储记忆功能。计算机由 硬件 软件组成 C/S架构与B/S架构 上面提到的应用软件,又分为两大类…

软件测试之登录测试详解

一、功能测试--登录功能性测试用例包括:1.什么都不输入,点击提交按钮,看提示信息。(非空检查)2.输入已注册的用户名和正确的密码,验证是否登录成功;3.输入已注册的用户名和不正确的密码&#xf…

PerformanceRunner即将发布2023年新版本,具体功能有哪些?

PerformanceRunner(简称PR)是国内专业的支持http、https、websocket、tcp/ip、MQ等各种协议、10万海量并发、可靠的性能测试工具/压力测试工具,降低了应用系统运行风险。 PerformanceRunner即将发布2023年新版本,具体功能有哪些? 1.录制时单机…

【Python入门篇】——Python函数(函数介绍,函数的定义,函数的参数和函数的返回值)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句…

都2023年了,网络安全还能入门吗?

前言 随着互联网的发展,网络安全逐渐成为重要领域之一。由于网络攻击已成为全球规模的问题,这使得网络安全专业成为各企业的重中之重。在这篇文章中,我们将从网络安全的发展趋势、就业前景和薪资水平方面入手,分析网络安全入门的…

【集群】部署LVS-DR群集

文章目录 一、LVS-DR工作原理1. 数据包流向分析2. DR模式的特点3. ARP 解析问题3.1 问题1:ip地址冲突3.2 问题2:真实服务器的第二次ARP请求3.3 解决ARP的两个问题的设置方法 二、LVS-DR部署过程1. 配置环境2. 部署服务器2.1 环境配置2.2 LVS-DR调度器2.2…