怎么做视频网站首页小学英语教师做应用相关网站

web/2025/10/3 19:19:16/文章来源:
怎么做视频网站首页,小学英语教师做应用相关网站,中国建筑网信息网,工信部网站备案系统登录本章概要 场景设定和问题复现解决技术代理模式面向切面编程思维#xff08;AOP#xff09;Spring AOP框架介绍和关系梳理 5.1 场景设定和问题复现 准备AOP项目 项目名#xff1a;spring-aop-annotation pom.xml dependencies!--spring context依赖--…本章概要 场景设定和问题复现解决技术代理模式面向切面编程思维AOPSpring AOP框架介绍和关系梳理 5.1 场景设定和问题复现 准备AOP项目 项目名spring-aop-annotation pom.xml dependencies!--spring context依赖--!--当你引入Spring Context依赖之后表示将Spring的基础依赖引入了--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion6.0.6/version/dependency!--junit5测试--dependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-api/artifactIdversion5.3.1/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion6.0.6/versionscopetest/scope/dependencydependencygroupIdjakarta.annotation/groupIdartifactIdjakarta.annotation-api/artifactIdversion2.1.1/version/dependency /dependencies声明接口 /*** - * / 运算的标准接口!*/ public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j);}接口实现package com.atguigu.proxy; /*** 实现计算接口,单纯添加 - * / 实现! 掺杂其他功能!*/ public class CalculatorPureImpl implements Calculator {Overridepublic int add(int i, int j) {int result i j;return result;}Overridepublic int sub(int i, int j) {int result i - j;return result;}Overridepublic int mul(int i, int j) {int result i * j;return result;}Overridepublic int div(int i, int j) {int result i / j;return result;} }声明带日志接口 实现新需求 需要在每个方法中添加控制台输出输出参数和输出计算后的返回值 /*** 在每个方法中,输出传入的参数和计算后的返回结果!*/ public class CalculatorLogImpl implements Calculator {Overridepublic int add(int i, int j) {System.out.println(参数是 i , j);int result i j;System.out.println(方法内部 result result);return result;}Overridepublic int sub(int i, int j) {System.out.println(参数是 i , j);int result i - j;System.out.println(方法内部 result result);return result;}Overridepublic int mul(int i, int j) {System.out.println(参数是 i , j);int result i * j;System.out.println(方法内部 result result);return result;}Overridepublic int div(int i, int j) {System.out.println(参数是 i , j);int result i / j;System.out.println(方法内部 result result);return result;} }代码问题分析 代码缺陷 对核心业务功能有干扰导致程序员在开发核心业务功能时分散了精力附加功能代码重复分散在各个业务功能方法中冗余且不方便统一维护 解决思路核心就是解耦。我们需要把附加功能从业务功能代码中抽取出来。将重复的代码统一提取并且[[动态插入]]到每个业务方法技术困难解决问题的困难提取重复附加功能代码到一个类中可以实现但是如何将代码插入到各个方法中我们不会我们需要引用新技术 5.2 解决技术代理模式 代理模式 二十三种设计模式中的一种属于结构型模式。 它的作用就是通过提供一个代理类让我们在调用目标方法的时候不再是直接对目标方法进行调用而是通过代理类间接调用。 让不属于目标方法核心逻辑的代码从目标方法中剥离出来——解耦。调用目标方法时先调用代理对象的方法减少对目标方法的调用和打扰同时让附加功能能够集中在一起也有利于统一维护。 无代理场景 有代理场景 生活中的代理 广告商找大明星拍广告需要经过经纪人合作伙伴找大老板谈合作要约见面时间需要经过秘书房产中介是买卖双方的代理太监是大臣和皇上之间的代理相关术语代理将非核心逻辑剥离出来以后封装这些非核心逻辑的类、对象、方法。(中介) 动词指做代理这个动作或这项工作名词扮演代理这个角色的类、对象、方法 目标被代理“套用”了核心逻辑代码的类、对象、方法。(房东)代理在开发中实现的方式具体有两种静态代理[动态代理技术] 静态代理 主动创建代理类 public class CalculatorStaticProxy implements Calculator {// 将被代理的目标对象声明为成员变量private Calculator target;public CalculatorStaticProxy(Calculator target) {this.target target;}Overridepublic int add(int i, int j) {// 附加功能由代理类中的代理方法来实现System.out.println(参数是 i , j);// 通过目标对象来实现核心业务逻辑int addResult target.add(i, j);System.out.println(方法内部 result addResult);return addResult;} }静态代理确实实现了解耦但是由于代码都写死了完全不具备任何的灵活性。就拿日志功能来说将来其他地方也需要附加日志那还得再声明更多个静态代理类那就产生了大量重复的代码日志功能还是分散的没有统一管理。 提出进一步的需求将日志功能集中到一个代理类中将来有任何日志需求都通过这一个代理类来实现。这就需要使用动态代理技术了。 动态代理 动态代理技术分类 JDK动态代理JDK原生的实现方式需要被代理的目标类必须实现接口他会根据目标类的接口动态生成一个代理对象代理对象和目标对象有相同的接口拜把子cglib通过继承被代理的目标类实现代理所以不需要目标类实现接口认干爹 JDK动态代理技术实现了解 代理工程基于jdk代理技术生成代理对象 import org.springframework.cglib.proxy.InvocationHandler; import org.springframework.cglib.proxy.Proxy;import java.lang.reflect.Method; import java.util.Arrays;public class ProxyFactory {private Object target;public ProxyFactory(Object target) {this.target target;}public Object getProxy(){/*** newProxyInstance()创建一个代理实例* 其中有三个参数* 1、classLoader加载动态生成的代理类的类加载器* 2、interfaces目标对象实现的所有接口的class对象所组成的数组* 3、invocationHandler设置代理对象实现目标对象方法的过程即代理类中如何重写接口中的抽象方法*/ClassLoader classLoader target.getClass().getClassLoader();Class?[] interfaces target.getClass().getInterfaces();InvocationHandler invocationHandler new InvocationHandler() {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {/*** proxy代理对象* method代理对象需要实现的方法即其中需要重写的方法* argsmethod所对应方法的参数*/Object result null;try {System.out.println([动态代理][日志] method.getName()参数 Arrays.toString(args));result method.invoke(target, args);System.out.println([动态代理][日志] method.getName()结果 result);} catch (Exception e) {e.printStackTrace();System.out.println([动态代理][日志] method.getName()异常e.getMessage());} finally {System.out.println([动态代理][日志] method.getName()方法执行完毕);}return result;}};return Proxy.newProxyInstance(classLoader, interfaces, invocationHandler);} }测试代码 Test public void testDynamicProxy(){ProxyFactory factory new ProxyFactory(new CalculatorLogImpl());Calculator proxy (Calculator) factory.getProxy();proxy.div(1,0);//proxy.div(1,1); }代理总结 代理方式可以解决附加功能代码干扰核心代码和不方便统一维护的问题 他主要是将附加功能代码提取到代理中执行不干扰目标核心代码但是我们也发现无论使用静态代理和动态代理(jdk,cglib)程序员的工作都比较繁琐需要自己编写代理工厂等但是我们在实际开发中不需要编写代理代码我们可以使用[Spring AOP]框架他会简化动态代理的实现 5.3 面向切面编程思维AOP 面向切面编程思想AOP AOPAspect Oriented Programming 面向切面编程 AOP 可以说是 OOPObject Oriented Programming面向对象编程的补充和完善。 OOP引入封装、继承、多态等概念来建立一种对象层次结构用于模拟公共行为的一个集合。 不过OOP允许开发者定义纵向的关系但并不适合定义横向的关系例如日志功能。 日志代码往往横向地散布在所有对象层次中而与它对应的对象的核心功能毫无关系对于其他类型的代码如安全性、异常处理和透明的持续性也都是如此这种散布在各处的无关的代码被称为横切cross cutting在OOP设计中它导致了大量代码的重复而不利于各个模块的重用。 AOP技术恰恰相反它利用一种称为横切的技术剖解开封装的对象内部并将那些影响了多个类的公共行为封装到一个可重用模块并将其命名为Aspect即切面。 所谓切面简单说就是那些与业务无关却为业务模块所共同调用的逻辑或责任封装起来便于减少系统的重复代码降低模块之间的耦合度并有利于未来的可操作性和可维护性。 使用AOP可以在不修改原来代码的基础上添加新功能。 AOP思想主要的应用场景 AOP面向切面编程是一种编程范式它通过将通用的横切关注点如日志、事务、权限控制等与业务逻辑分离使得代码更加清晰、简洁、易于维护。AOP可以应用于各种场景以下是一些常见的AOP应用场景 日志记录在系统中记录日志是非常重要的可以使用AOP来实现日志记录的功能可以在方法执行前、执行后或异常抛出时记录日志。事务处理在数据库操作中使用事务可以保证数据的一致性可以使用AOP来实现事务处理的功能可以在方法开始前开启事务在方法执行完毕后提交或回滚事务。安全控制在系统中包含某些需要安全控制的操作如登录、修改密码、授权等可以使用AOP来实现安全控制的功能。可以在方法执行前进行权限判断如果用户没有权限则抛出异常或转向到错误页面以防止未经授权的访问。性能监控在系统运行过程中有时需要对某些方法的性能进行监控以找到系统的瓶颈并进行优化。可以使用AOP来实现性能监控的功能可以在方法执行前记录时间戳在方法执行完毕后计算方法执行时间并输出到日志中。异常处理系统中可能出现各种异常情况如空指针异常、数据库连接异常等可以使用AOP来实现异常处理的功能在方法执行过程中如果出现异常则进行异常处理如记录日志、发送邮件等。缓存控制在系统中有些数据可以缓存起来以提高访问速度可以使用AOP来实现缓存控制的功能可以在方法执行前查询缓存中是否有数据如果有则返回否则执行方法并将方法返回值存入缓存中。动态代理AOP的实现方式之一是通过动态代理可以代理某个类的所有方法用于实现各种功能。综上所述AOP可以应用于各种场景它的作用是将通用的横切关注点与业务逻辑分离使得代码更加清晰、简洁、易于维护。 AOP术语名词介绍 1-横切关注点 从每个方法中抽取出来的同一类非核心业务。在同一个项目中我们可以使用多个横切关注点对相关方法进行多个不同方面的增强。 这个概念不是语法层面天然存在的而是根据附加功能的逻辑上的需要有十个附加功能就有十个横切关注点。 AOP把软件系统分为两个部分核心关注点和横切关注点。业务处理的主要流程是核心关注点与之关系不大的部分是横切关注点。横切关注点的一个特点是他们经常发生在核心关注点的多处而各处基本相似比如权限认证、日志、事务、异常等。 AOP的作用在于分离系统中的各种关注点将核心关注点和横切关注点分离开来。 2-通知(增强) 每一个横切关注点上要做的事情都需要写一个方法来实现这样的方法就叫通知方法。 前置通知在被代理的目标方法前执行返回通知在被代理的目标方法成功结束后执行寿终正寝异常通知在被代理的目标方法异常结束后执行死于非命后置通知在被代理的目标方法最终结束后执行盖棺定论环绕通知使用try…catch…finally结构围绕整个被代理的目标方法包括上面四种通知对应的所有位置 3-连接点 joinpoint 这也是一个纯逻辑概念不是语法定义的。指那些被拦截到的点。 在 Spring 中可以被动态代理拦截目标类的方法 4-切入点 pointcut 定位连接点的方式或者可以理解成被选中的连接点是一个表达式比如execution(* com.spring.service.impl…(…))。符合条件的每个方法都是一个具体的连接点。 5-切面 aspect 切入点和通知的结合。是一个类。 6-目标 target 被代理的目标对象。 7-代理 proxy 向目标对象应用通知之后创建的代理对象。 8-织入 weave 指把通知应用到目标上生成代理对象的过程。可以在编译期织入也可以在运行期织入Spring采用后者。 5.4 Spring AOP框架介绍和关系梳理 AOP一种区别于OOP的编程思维用来完善和解决OOP的非核心代码冗余和不方便统一维护问题代理技术动态代理|静态代理是实现AOP思维编程的具体技术但是自己使用动态代理实现代码比较繁琐Spring AOP框架基于AOP编程思维封装动态代理技术简化动态代理技术实现的框架SpringAOP内部帮助我们实现动态代理我们只需写少量的配置指定生效范围即可,即可完成面向切面思维编程的实现

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

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

相关文章

陕西省建设监理协会网站重庆福彩建站

金蝶EAS是基于JavaEE的大型企业应用。目前服务端支持以下主流软硬件环境。适用版本:EAS7.0 EAS703 EAS7.51.金蝶EAS服务端支持的软硬件环境注:标志为部署支持的环境,可以正常安装配置,但是正式运行前需联系金蝶技术支持。2.客户端…

计算机网站建设考试试卷集团网站建设招标

🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

企业品牌网站建设的关键事项住建部网站统计城乡建设统计信息系统登录

背景 相信签到系统大家都有接触过,更多的是使用。但是有思考过这种系统是怎么设计的吗?比方说我统计一下每个月中每天的签到情况,怎么设计呢?今天一篇文章告诉你。 首先,我们熟悉的思维是:我设计一个数据…

北京谷歌seo公司十堰seo优化分析

负载均衡式——Online Judge😎 前言🙌Online Judge 项目一、项目介绍二、项目技术栈三、项目使用环境四、项目宏观框架五、项目后端服务实现过程1、comm模块设计1.1 Log.hpp实现1.2 Util.hpp实现 2、compiler_server 模块设计2.1compile.hpp文件代码编写…

深圳网站建设公司团队霞浦建设局网站

考虑到此时读者不知道何为正则表达式: 我需要验证一个字符串是否符合qq号码的规则,我们采取已有知识进行验证 import java.util.Scanner;public class Main{public static void main(String[] args){//正则表达式理解为一种规则//这种规则就是用来校验…

副业做网站软件建网站深

备份系统 首先进入文件系统的根目录(当然,如果你不想备份整个文件系统,你也可以进入你想要备份的目录,包括远程目录或者移动硬盘上的目录): # cd / 下面是我用来备份系统的完整命令: # tar cvpzf backup.tgz - - exclu…

有引导的网站网站建设哪专业

问题:1005 - 已知一个圆的半径,求解该圆的面积和周长 类型:基础问题、小数运算 题目描述: 已知一个圆的半径,求解该圆的面积和周长。 输入: 输入只有一行,只有 1 个整数。 输出&#xff1a…

深圳网站制作公司好的建设网站公司哪家好

mockito java这篇文章展示了如何使用Mockito模拟java.sql.ResultSet 。 它可用于帮助对ResultSet进行操作的单元测试代码(例如ResultSetExtractor )而无需依赖外部数据源。 您可以通过提供列名列表和2D数据数组来创建MockResultSet 。 例如:…

注册公司在哪个网站网页制作素材库属不属于信息管理

function getEventTarget(e){ewindow.event||e;return e.srcElement||e.target; }转载于:https://www.cnblogs.com/manong13/archive/2012/02/23/2364443.html

西乡网站建设公司建设公司官网流程

问题症状:WIN10下运行最新版微信(CrashVersion1644560715) ---------------------------微信运行错误---------------------------你的微信崩溃次数较多,建议使用最新版本,点击"确定"到官网(http://pc.weixi…

帮卖货平台如何做谷歌优化

阅读笔记 模型选择:是否一定要选择参数量巨大的模型?如果需要更好的泛化能力,用于处理非单一的任务,例如对话,则可用选更大的模型;而对于单一明确的任务,则不一定越大越好,参数小一…

成都网站搜索引擎优化淘宝关键词搜索排行榜

**530.二叉搜索树的最小绝对差 ** 遇到在二叉搜索树上求什么最值&#xff0c;求差值之类的&#xff0c;都要思考一下二叉搜索树可是有序的&#xff0c;要利用好这一特点。 class Solution { public:void trival(TreeNode* node, vector<int>& nums) {if (node nul…

网站二级域名怎么设置网站建设常用视频格式

操作系统的理解 冯诺伊曼体系结构为什么必须通过内存然后到cpu存储金字塔冯诺伊曼结构的改进在哪&#xff1f;我们可不可以全部用寄存器来做存储器在硬件数据流动角度学以致用&#xff1a;解释程序运行为什么要加载到内存程序没被运行之前存在哪里&#xff1f; 操作系统概念广义…

电商网站建设的目标安卓 网站整站下载

在项目中&#xff0c;使用代码生成器给我们的开发工作带来了相当大的方便&#xff0c;而有时候会出现这样的问题&#xff0c;就是新附加的数据库在动软代码生成器当中看不到&#xff0c;奇了怪了 一&#xff0c;首先看动软代码生成器的链接字符串&#xff0c;如图 &#xff0c;…

南昌哪家做网站好wordpress怎么添加关键词

做外贸是一项复杂而又具有挑战性的工作。在这个竞争激烈的市场中&#xff0c;找到合适的客户是成功的关键。下面是一些关于米贸搜如何找到外贸客户的经验分享。 第一&#xff0c;建立一个专业的网站。互联网已经成为了人们获取信息、进行交流的主要平台。因此&#xff0c;建立…

兰州做公司网站可口可乐营销案例分析

当使用 Rust 实现建造者模式时&#xff0c;我们可以通过结构体和方法链来实现。建造者模式是一种创建型设计模式&#xff0c;它允许你按照特定的顺序构建复杂对象&#xff0c;同时使你能够灵活地构建不同的变体。下面是一个使用 Rust 实现建造者模式的示例&#xff0c; 在示例中…

高端建站咨询WordPress贴图库图片接口

很久没更新jekyll了&#xff0c;所以好奇着去官网看了下更新记录&#xff0c;发现如下更新条目&#xff08;版本1.3.0/2013-11-04发布&#xff09;&#xff1a; Add encoding configuration option (#1449)之前在windows下安装jekyll运行编写的代码时&#xff0c;如果有中文&am…

制作公司网站多少钱html代码分享

Windowsr:打开“运行” 在“运行”里输入&#xff1a;services.msc 则打开服务转载于:https://www.cnblogs.com/echonn/archive/2012/09/27/2706416.html

模板网站代码盐城seo快速排名

内建函数 以下是目前我们已经渗透过的内建函数: 类型相关 int() 创建或者将其他数据转化为整型float() 创建或者将其他数据转化为浮点型bool() 创建或者将其他数据转化为布尔型complex() 创建或者将其他数据转化为复数str() 创建或者将其他数据转化为字符串list() 创建或…

百度网站官网入口网址公司管理系统数据库

通讯芯片是指在通讯系统中起到连接和传输信号的重要组成部分。根据通讯芯片的功能和应用,可以将其分为以下几类: 1、收发器芯片 2、窄带中频放大器芯片 3、卫星接收器LNB芯片 4、电话机芯片 5、压缩扩展器芯片 以上是通讯芯片的一些分类&#xff0c;随着通讯技术的不断发展…