Javaee Spring的AOP简介

.SpringAOP简介

1.1 什么是AOP

   AOP Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代 理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容。利用 AOP 可以对业务 逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低 ,提高程序的可重用性,同时提高了开发的效率。

1.2 AOP的作用及其优势

作用:在程序运行期间,在不修改源码的情况下对方法进行 增强
优势:减少重复代码,提高开发效率,并且便于维护

1.3 AOP的底层实现

      实际上, AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间, Spring 通过动态代理技术 动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能 的增强。

1.4 AOP的动态代理技术

常用的动态代理技术
JDK 代理:基于接口的动态代理技术
cglib 代理:基于父类的动态代理技术

 1.5 JDK的动态代理

1.5.1 代理模式概述
    为什么要有 '' 代理 ''? 生活中就有很多代理的例子,例如,我现在需要出国,但是我不愿意自己去办签证、预定 机票和酒店(觉得麻烦 ,那么就可以找旅行社去帮我办,这时候旅行社就是代理,而我自己就是被代理了。 代理模式的定义:被代理者没有能力或者不愿意去完成某件事情,那么就需要找个人代替自己去完成这件事, 这个人就是代理者, 所以代理模式包含了 3 个角色 : 被代理角色 代理角色 抽象角色 ( 协议 )
1.5.2 静态代理
项目结构:
package wwx.test02;
public interface Sing {
    public void sing();
}
-------------------------------------------
package wwx.test02;

public class JinLian implements Sing {

    @Override
    public void sing() {
        System.out.println("jinlian在唱歌");
    }
}
-------------------------------------------
package wwx.test02;

public class WangPo implements Sing{

    JinLian jinLian;

    public WangPo(JinLian jinLian) {
        this.jinLian = jinLian;
    }

    @Override
    public void sing() {
        jinLian.sing();
    }
}
-------------------------------------------
package wwx.test02;

public class XiMen {

    public static void main(String[] args) {
       JinLian jl=new JinLian();
       WangPo wp=new WangPo(jl);
       wp.sing();
//被代理者没有能力或者不愿意去完成某件事情,
//那么就需要找个人代替自己去完成这件事,这个人就是代理者
//静态代理模式:代理类是实际存在的,根据代理类生成一个代理对象
//动态代理模式:代理类是不存在的,直接动态生成一个代理对象
//实现了静态代理
    }
}
------------------------------------------

 

1.5.3 动态代理
    概述 : 动态代理就是直接通过反射生成一个代理对象 , 代理对象所属的类是不需要存在的 动态代理的获取: jdk提供一个Proxy类可以直接给实现接口类的对象直接生成代理对象
参数 1:ClassLoader loader 被代理对象的类加载器
参数 2:Class<?>[] interfaces 被代理对象的要实现的接口
参数 3:InvocationHandler h ( 接口 ) 执行处理接口
返回值 : 代理对象
2 个参数是为了帮助在 jvm 内部生成被代理对象的代理对象 , 3 个参数 , 用来监听代理对象调用方
, 帮助我们调用方法
回调方法 : 当代理对象调用了方法 , 就会来执行该 invoke 方法 , 在该方法中就可以增强
被代理类的方法
参数 1: 生成的代理对象 这里就是 p 这个代理对象 ( 慎用 )
参数 2: 当前代理对象执行的方法 这里 method 就是 happy() 方法对象
参数 3: 当前代理对象执行的方法 , 传入的实际参数
返回值 : 当前代理对象执行的方法的返回值
参数 1: 生成的代理对象 这里就是 p 这个代理对象 ( 慎用 )的原因: 
package wwx.test03;

public class JianLian implements Sing{

    @Override
    public void sing() {
        System.out.println("金莲在唱歌");
    }
}

------------------------------------------------------------------------------------
------------------------
package wwx.test03;

public interface Sing {

    public void sing();
}

------------------------------------------------------------------------------------
------------------------

package wwx.test03;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;

public class DemoTest {

//    参数1:ClassLoader loader 被代理对象的类加载器
//    参数2:Class<?>[] interfaces 被代理对象的要实现的接口
//1.6 AOP相关概念
//    在正式讲解 AOP 的操作之前,我们必须理解 AOP 的相关术语,常用的术语如下:
//    Target(目标对象):代理的目标对象
//    Proxy (代理):一个类被 AOP 织入增强后,就产生一个结果代理类
//    参数3:InvocationHandler h (接口)执行处理接口
//    返回值: 代理对象
//            前2个参数是为了帮助在jvm内部生成被代理对象的代理对象,第3个参数,用来监听代理对象调用方
//    法,帮助我们调用方法
    public static void main(String[] args) {
        JianLian jianLian=new JianLian();
        Sing p = (Sing) Proxy.newProxyInstance(JianLian.class.getClassLoader(),
                JianLian.class.getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        Date date=new Date();
                        System.out.println(date);
                       method.invoke(jianLian,args);
                        return null;
                    }
                });

       p.sing();
    }
}

 

1.6 AOP相关概念

   在正式讲解 AOP 的操作之前,我们必须理解 AOP 的相关术语,常用的术语如下:
Target (目标对象):代理的目标对象
Proxy (代理):一个类被 AOP 织入增强后,就产生一个结果代理类
Joinpoint (连接点):类里面哪些方法可以被增强,这些方法称为连接点, spring 只支持方法类型的连接点
Pointcut (切入点):实际被真正增强的方法,称为切入点
Advice (通知 / 增强):实际增强的逻辑部分称为通知(增强),通知有多种类型:
前置通知:指定增强的方法在切入点方法之前执行
后置通知:指定增强的方法在切入点方法之后执行
异常通知:指定增强的方法在出现异常时执行
最终通知:无论增强方式执行是否有异常都会执行
环绕通知:指定增强的方法在切入点方法之前和之后都执行
Aspect (切面):是切入点和通知(引介)的结合
Weaving (织入):是指把增强应用到目标对象来创建新的代理对象的过程。 spring 采用动态代理织入,而AspectJ 采用编译期织入和类装载期织入

1.7 AOP 开发明确的事项

1.7.1 需要编写的内容
编写核心业务代码(目标类的目标方法)
编写切面类,切面类中有通知 ( 增强功能方法 )
在配置文件中,配置织入关系,即将哪些通知与哪些连接点进行结合
1.7.2 AOP 技术实现的内容
Spring 框架监控切入点方法的执行。一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代 理对象,根据通知类别,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行。
1.7.3 AOP 底层使用哪种代理方式
spring 中,框架会根据目标类是否实现了接口来决定采用哪种动态代理的方式。

.基于XMLAOP开发

2.1 快速入门
1. 导入 AOP 相关坐标
2. 创建目标接口和目标类(内部有切点)
3. 创建切面类(内部有增强方法)
4. 将目标类和切面类的对象创建权交给 spring
5. applicationContext.xml 中配置织入关系
6. 测试代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本控制

shell脚本编程系列 处理信号 Linux利用信号与系统中的进程进行通信&#xff0c;通过对脚本进行编程&#xff0c;使其在收到特定信号时执行某些命令&#xff0c;从而控制shell脚本的操作。 Linux信号 shell脚本编程会遇到的最常见的Linux系统信号如下表所示&#xff1a; 在默…

【获奖案例巡展】信创先锋之星——浙江省某市区视频能力中心

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目&#xff0c;星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动&#xff0c;旨在为各行业提供更多的优秀产品案例&#xff0c;彰显技术改变世界的力量&#xff0…

Cycling 74 Max for Mac:音乐可视化编程软件

Cycling 74 Max是一款音乐、视觉、互动艺术等领域中广泛使用的编程语言和应用软件&#xff0c;它允许用户创作和控制实时音频和视频效果、交互式应用程序和媒体艺术品等。 Max将程序设计和可视化编程相结合&#xff0c;通过简单的拖拽和连接方式&#xff0c;用户可以将各种功能…

基于springboot的大学生租房系统源码论文数据库

3.1系统功能 现在无论是在PC上还是在手机上&#xff0c;相信全国所有地方都在进行大学生租房管理。随着经济的不断发展&#xff0c;系统管理也在不断增多&#xff0c;大学生租房系统就是其中一种&#xff0c;很多人会登录到相关的租房系统查看租房信息&#xff0c;还能查看房屋…

微信小程序开发--利用和风天气API实现天气预报小程序

本来是参照《微信小程序开发实战》做一个天气预报小程序的&#xff0c;实际运行的时候提示错误&#xff0c;code 400&#xff0c;参数错误。说明问题应该出在查询API的语句上&#xff0c;没有返回结果。 查阅后才知道&#xff0c;可能书籍出版时间较早&#xff0c;现在的和风获…

类对象

一、类初识 类&#xff1a;表示一种事物所具有的共同特征和行为 对象&#xff1a;一个类的实例 如下图&#xff0c;通过狗这个类进行详解 这是一个Dog类 对象&#xff1a;斗牛犬、小猎犬、牧羊犬 类中的属性&#xff1a;breed(品种)、size(大小)、color(颜色)、age(年龄)、 …

安全常见基础名词概念

一、域名 1、域名&#xff1a;相当网站的名字&#xff0c;互联网上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时标识计算机的电子方位。 2、网域名系统&#xff08;Domain Name System&#xff09;有时也简称为域名&#xff08;DNS&#xff09;&#xff0c;是互…

探索【Stable-Diffusion WEBUI】的插件:骨骼姿态(OpenPose)

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;骨骼姿态&#xff08;OpenPose&#xff09;系列插件&#xff08;二&#xff09;插件&#xff1a;PoseX&#xff08;三&#xff09;插件&#xff1a;Depth Lib&#xff08;四&#xff09;插件&#xff1a;3D …

响应式开发(HTML5CSS3)实现媒体查询的功能案例

目录 前言 一、媒体查询知识点 二、实现功能的尺寸 三、代码部分 1.不带嵌套的媒体查询功能 1.1.代码段 1.2.运行结果 2.带嵌套的媒体查询功能 2.1.代码段 2.2.运行结果 2.2.3视频效果 前言 1.本文讲解的响应式开发技术&#xff08;HTML5CSS3Bootstrap&#xff09…

Auto-GPT免费尝鲜之初体验-使用攻略和总结

Auto-GPT免费尝鲜之初体验-使用攻略和总结 写在前面的废话一、部署 Auto-GPT二、试运行 Auto-GPT三、我踩过的坑四、后续探索 写在前面的废话 ChatGPT 的交互模式&#xff0c;是和一个 “人” 对话聊天。 如果你想了解更多ChatGPT和AI绘画的相关知识&#xff0c;请参考&#…

ArcGIS Pro用户界面

目录 1 功能区 1.1 快速访问工具栏 1.2 自定义快速访问工具栏 1.3 自定义功能区选项 1.3.1 添加组和命令 1.3.2 添加新选项卡 2 视图 3 用户界面排列 ​编辑 4 窗格 4.1 内容窗格 4.2 目录窗格 4.3 目录视图&#xff08;类似ArcCatalog&#xff09; 4.4 浏览对话框…

python:面向对象编程(知识点+代码)

文章目录 一、类和对象1、对象属性的默认值设置2、对象属性的添加、修改与删除3 、类属性 二、类的继承 引言&#xff1a;面向对象编程时一门编程语言重要的功能&#xff0c;我们之前所学的 c&#xff0c;java都为面向对象编程语言&#xff0c;这里给大家拓展一下&#xff0c;…

什么是CDN加速?CDN加速有哪些作用?

一、什么是 CDN CDN 的全称是 Content Delivery Network&#xff0c;即内容分发网络。CDN 是在现有 Internet 基础上增加一层新的网络架构&#xff0c;通过部署边缘服务器&#xff0c;采用负载均衡、内容分发、调度等功能&#xff0c;使用户可以就近访问获取所需内容&#xff…

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测 目录 多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-…

2023年报考CSM敏捷教练认证好不好?含金量高吗?

CSM&#xff0c;Certified Scrum Master&#xff0c;是Scrum联盟发起的Scrum认证。帮助个人从自身、团队和组织层面&#xff0c;学习技能和工具来扩展实践的层面&#xff0c;帮助团队正确使用Scrum&#xff0c;从而提高项目整体成功的可能性。 认证收益 职业能力提升 推动企业…

图神经网络能做什么?

从概念上讲&#xff0c;我们可以将图神经网络的基本学习任务分为 5 个不同的方向&#xff1a; &#xff08;1&#xff09;图神 经网络方法&#xff1b; &#xff08;2&#xff09;图神经网络的理论理解&#xff1b; &#xff08;3&#xff09;图神经网络的可扩展性&#xff1b…

VLAN基础实验

实验要求&#xff1a; 1、PC1和PC3所在接口为Access接口 PC2/4/5/6处于同一网段:其中PC2可以访问PC4/5/6 PC4可以访问PC5&#xff0c;但不能访问PC6 PC5不能访问PC6 2、PC1/3与PC2/4/5/6不再同一网段 3、所有PC通过DHCP获取IP地址&#xff0c;且PC1/3可以正常访问PC2/4/5/6 实…

jenkins——环境变量、节点配置以及节点环境变量的使用

这里写目录标题 一、Jenkins 环境变量1、环境变量分类a、系统内置环境变量b、用户自定义环境变量 2、环境变量的使用3、控制台输出 二、Jenkins 节点配置1、Jenkins的常用节点2、准备工作3、SSH类节点配置4、Java web节点配置5、Java web节点配置详细步骤 三、Jenkins 节点环境…

操作系统八股文知识点汇总

1. 程序编译过程 gcc HelloWorld.c -E -o HelloWorld.i 预处理&#xff1a;加入头文件&#xff0c;替换宏。gcc HelloWorld.c -S -c -o HelloWorld.s 编译&#xff1a;包含预处理&#xff0c;将 C 程序转换成汇编程序。gcc HelloWorld.c -c -o HelloWorld.o 汇编&#xff1a;包…

GEE遥感云大数据在林业中的应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…