药剂学教学网站的建设福田公司门口

web/2025/9/30 14:18:04/文章来源:
药剂学教学网站的建设,福田公司门口,定制网站成本多少,学网站建设学校国庆中秋特辑系列文章#xff1a; 国庆中秋特辑#xff08;八#xff09;Spring Boot项目如何使用JPA 国庆中秋特辑#xff08;七#xff09;Java软件工程师常见20道编程面试题 国庆中秋特辑#xff08;六#xff09;大学生常见30道宝藏编程面试题 国庆中秋特辑 国庆中秋特辑八Spring Boot项目如何使用JPA 国庆中秋特辑七Java软件工程师常见20道编程面试题 国庆中秋特辑六大学生常见30道宝藏编程面试题 国庆中秋特辑五MySQL如何性能调优下篇 国庆中秋特辑四MySQL如何性能调优上篇 国庆中秋特辑三使用生成对抗网络GAN生成具有节日氛围的画作深度学习框架 TensorFlow 和 Keras 来实现 国庆中秋特辑二浪漫祝福方式 使用生成对抗网络GAN生成具有节日氛围的画作 国庆中秋特辑一浪漫祝福方式 用循环神经网络RNN或长短时记忆网络LSTM生成祝福诗词 目录 一、Spring AOP 简介二、Spring AOP 原理三、Spring AOP 案例分析四、Spring AOP 提供了两种动态代理方式 Spring AOPAspect-Oriented Programming面向切面编程是 Spring 框架的一个重要模块。 一、Spring AOP 简介 Spring AOPAspect-Oriented Programming面向切面编程是 Spring 框架的一个重要模块用于提供声明式的事务管理、日志记录、性能监控等功能。Spring AOP 底层依赖于 AspectJ 实现可以与 Spring 框架无缝集成提供一种更加简单、直观的方式来处理企业应用中的常见问题。 二、Spring AOP 原理 代理机制 Spring AOP 采用代理机制实现可以分为 JDK 动态代理和 CGLIB 动态代理。JDK 动态代理是通过实现目标类的接口生成目标类的代理对象CGLIB 动态代理是通过继承目标类生成目标类的子类作为代理对象。通知Advice 通知是 Spring AOP 中实现切面功能的核心可以分为五种类型Before、After、AfterReturning、AfterThrowing 和 Around。通知的作用是在目标方法执行前、后或者抛出异常时执行特定的逻辑实现对目标方法的增强。切入点Pointcut 切入点是 Spring AOP 中定义的一个表达式用于指定哪些方法需要被增强。切点表达式可以使用 AspectJ 语言来编写非常灵活。通过定义切入点可以精确地控制哪些方法需要被增强。切面Aspect 切面是 Spring AOP 中的一种组件包含切点和通知。切面可以将通用的逻辑如日志、事务管理等封装在一起便于管理和维护。在 Spring AOP 中可以通过 XML 配置文件或者 Java 代码来定义切面。自动代理 Spring AOP 框架支持自动代理可以在运行时自动为指定类生成代理对象。自动代理的核心是 Spring AOP 容器负责管理代理对象、切面和通知。通过自动代理可以简化开发者的操作提高开发效率。 三、Spring AOP 案例分析 以下通过一个简单的案例来演示 Spring AOP 的使用。 配置文件 首先创建一个配置文件 applicationContext.xml用于定义目标类和切面类。 beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:aophttp://www.springframework.org/schema/aop xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd!-- 定义目标类 -- bean idtarget classcom.example.TargetClass/bean!-- 定义切面类 -- bean idaspect classcom.example.AspectClass/bean!-- 开启自动代理 -- aop:config proxy-target-classtrue !-- 指定切入点表达式 -- aop:aspect refaspect aop:before pointcutexecution(* com.example.TargetClass.*(..)) methodcom.example.AspectClass.beforeAdvice/aop:before aop:after pointcutexecution(* com.example.TargetClass.*(..)) methodcom.example.AspectClass.afterAdvice/aop:after /aop:aspect /aop:config /beans 目标类TargetClass 目标类是一个简单的计算类包含两个方法doAdd 和 doSubtract。 package com.example; public class TargetClass { public int doAdd(int a, int b) { System.out.println(TargetClass doAdd method called); return a b; }public int doSubtract(int a, int b) { System.out.println(TargetClass doSubtract method called); return a - b; } }切面类AspectClass 切面类包含两个通知方法beforeAdvice 和 afterAdvice分别用于在目标方法执行前和执行后执行特定逻辑。 package com.example; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.After; public class AspectClass { Before(execution(* com.example.TargetClass.*(..))) public void beforeAdvice(JoinPoint joinPoint) { System.out.println(Before advice: joinPoint.getSignature().getName()); }After(execution(* com.example.TargetClass.*(..))) public void afterAdvice(JoinPoint joinPoint) { System.out.println(After advice: joinPoint.getSignature().getName()); } }测试类TestClass 测试类用于测试 Spring AOP 的效果。 package com.example; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestClass { public static void main(String[] args) { ApplicationContext context new ClassPathXmlApplicationContext(applicationContext.xml); TargetClass target (TargetClass) context.getBean(target);int result1 target.doAdd(2, 3); int result2 target.doSubtract(5, 2);System.out.println(Result 1: result1); System.out.println(Result 2: result2); } }运行测试类输出结果如下 TargetClass doAdd method called Before advice: doAdd After advice: doAdd Result 1: 5 TargetClass doSubtract method called Before advice: doSubtract After advice: doSubtract Result 2: 3 从输出结果可以看出在目标方法执行前和执行后分别执行了 beforeAdvice 和 afterAdvice 方法说明 Spring AOP 已经成功实现了对目标方法的增强。 四、Spring AOP 提供了两种动态代理方式 JDK 动态代理和 CGLIB 动态代理。JDK 动态代理是基于接口实现的而 CGLIB 动态代理是基于类实现的。这两种代理方式在性能上有一定的差别JDK 动态代理更适合用于接口较多的场景而 CGLIB 动态代理则更适合用于类较多的场景。 4.1 下面是一个简单的 Spring AOP JDK 动态代理示例演示了如何使用 Spring AOP 实现日志切面 首先创建一个切面类Aspect包含一个通知Advice package com.example.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; Aspect Component public class LoggingAspect {Pointcut(execution(* com.example.service.*.*(..))) public void serviceMethods() { }Before(serviceMethods()) public void logBefore(JoinPoint joinPoint) { System.out.println(Before method: joinPoint.getSignature().getName()); }AfterReturning(pointcut serviceMethods(), returning result) public void logAfterReturning(JoinPoint joinPoint, Object result) { System.out.println(After returning method: joinPoint.getSignature().getName()); System.out.println(Result: result); } }接下来创建一个目标类Target Class包含一个需要增强的方法 package com.example.service; import org.springframework.stereotype.Service; Service public class TargetService {public String sayHello(String name) { System.out.println(Hello, name); return Hello, name; } }然后创建一个 Spring 配置类启用 AOP 支持并扫描包含切面和目标类的包 package com.example; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; Configuration EnableAspectJAutoProxy ComponentScan(basePackages {com.example.aspect, com.example.service}) public class AppConfig { }最后创建一个测试类使用 Spring AOP 提供的 API 调用目标类的方法 package com.example; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.stereotype.Component; Component public class Test {public static void main(String[] args) { ApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class); TargetService targetService context.getBean(TargetService.class); String result targetService.sayHello(World); System.out.println(Result: result); } }运行测试类你将看到目标方法被切面增强的日志输出。这个示例展示了如何使用 Spring AOP JDK 动态代理实现简单的日志切面以记录目标方法执行的前后状态。这有助于实现代码的重用和提高可维护性。 4.2 下面是一个简单的 Spring AOP CGLIB 动态代理示例演示了如何使用 Spring AOP 实现日志切面 首先创建一个切面类Aspect包含一个通知Advice package com.example.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; Aspect Component public class LoggingAspect {Pointcut(execution(* com.example.service.*.*(..))) public void serviceMethods() { }Before(serviceMethods()) public void logBefore(JoinPoint joinPoint) { System.out.println(Before method: joinPoint.getSignature().getName()); }AfterReturning(pointcut serviceMethods(), returning result) public void logAfterReturning(JoinPoint joinPoint, Object result) { System.out.println(After returning method: joinPoint.getSignature().getName()); System.out.println(Result: result); } }接下来创建一个目标类Target Class包含一个需要增强的方法 package com.example.service; import org.springframework.stereotype.Service; Service public class TargetService {public String sayHello(String name) { System.out.println(Hello, name); return Hello, name; } }然后创建一个 Spring 配置类启用 AOP 支持并扫描包含切面和目标类的包 package com.example; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; Configuration EnableAspectJAutoProxy ComponentScan(basePackages {com.example.aspect, com.example.service}) public class AppConfig { }最后创建一个测试类使用 Spring AOP 提供的 API 调用目标类的方法 package com.example; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.stereotype.Component; Component public class Test {public static void main(String[] args) { ApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class); TargetService targetService context.getBean(TargetService.class); String result targetService.sayHello(World); System.out.println(Result: result); } }运行测试类你将看到目标方法被切面增强的日志输出。这有助于实现代码的重用和提高可维护性。 需要注意的是CGLIB 动态代理需要 TargetService 类实现 equals() 和 hashCode() 方法否则会报错。这是因为 CGLIB 需要生成目标类的代理类而如果 TargetService 类没有实现 equals() 和 hashCode() 方法那么生成的代理类将无法正确处理目标类的对象。

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

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

相关文章

机关单位网站建设工作方案中国网站模板下载

强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性。自愈的默认实现方式是自动重启发生故障的容器。除此之外,用户还可以利用 Liveness 和 Readiness 探测机制设置更精细的健康检查,进而实现如下需求: 零停机部署。 避免部署无效…

广东企业移动网站建设哪家好上海好的设计公司

目录 一、预装软件 二、创建sftp管理组 三、SSH设置 三、创建用户家目录和设置home权限 四、创建用户并设置上传目录权限控制 五、用户初始化密码 六、说明 需求客户要求与第三方通过sftp交互文件,需要在Linux系统部署sftp服务器。考虑安全,计划对…

网站里的课程配图怎么做电子商务网站建设读书笔记

AWS Fargate 是一个由 Amazon Web Services (AWS) 提供的无服务器容器计算引擎。它使开发者能够运行容器化应用程序,而无需管理底层的服务器或虚拟机。简而言之,AWS Fargate 让你只需关注应用的容器本身,而不需要管理运行容器的基础设施&…

想做网站的公司好国家的企业信息网

上一篇我们学习了CSS基本样式和选择器,相信大家对于样式的使用有了初步认知。 本篇我们继续来学习CSS中的扩展选择器及CSS继承性,如何使用这些扩展选择器更好的帮助我们美化页面。 下一篇我们将会学习CSS中常用的属性。 喜欢的 【点赞】【关注】【收藏】…

网站建设与排名wangzhan

并查集、树状数组、线段树 并查集树状数组树状数组1 (单点修改,区间查询)树状数组2 (单点查询,区间修改) 并查集 【模板】并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作。 输入格式 第一行包含两个整数 …

建设网站的难点微信朋友圈软文大全

1.语法顺序 select语句的语法格式如下。 select 字段列表 from 数据源 [ where条件表达式 ] [ group by 分组字段 ] [ having条件表达式 ] [ order by 排序字段 [ asc | desc ] ] 2.执行顺序 FROM 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1 ON 对虚表VT…

网站上常用字体寻找合肥网站建设

下面这个TXT文档里面是一篇长篇小说,大家都知道一般小说文字内容是比较大的一个文件呢,想要拆分,拆分肯定是有方法呢,比如比较重统的方法手动一章一章复制出来,粘贴到另一个文档里面去粘贴,手动操作是不是很…

专做男装的网站施工企业安全文明施工费取费

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接keyvalue格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。1. 配置文件Log4J配置文件的基本格式如下: #配置根Loggerlog4j.rootLog…

成品网站建设哪家好100款不良网站进入窗口软件

《北京作家》今年第一期(总第七期)最近和读者见面了。这期重点推出了纪念刚刚故去的史铁生的专辑。首发了史铁生生前几个时期四张照片,并发表了他的好友曹文轩、林莽、甘铁生的纪念文章,文章字字真切,句句深情&#xf…

设计工作室网站社交营销可以用于网站制作行业吗

使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据 使用Datatable作为数据源的方式:下面的代码使用到了Co…

阿里云如何建立网站网线制作步骤图片

axios参数汇总 url: 用于请求的服务器 URL。 method: 创建请求时使用的方法,默认为 get baseURL: 自动加在 url 前面,除非 url 是绝对 URL transformRequest: 在发送请求前修改请求数据的函数,仅适用于 PUT, POST 和 PATCH 请求方法 它只能…

网站备案期间可以建站软件开发项目总结报告

3.3 主存储器与CPU连接 3.3.1 连接原理 现代计算机的MAR和MDR都在CPU内部。 (1)主存储器通过数据总线,地址总线,控制总线与CPU连接。 (2)数据传输率数据总线宽度*总线频率。 (4)控制总线(读写线)控制读写操作。 3.3.2 主存的扩展 数据总线宽度等于存储字长 1.位扩展法【增加…

宁波电商网站建设开发php网站开发技术课程

嵌入式系统正在日益广泛的应用于各个方面,嵌入式系统的最大特点在于其精简和实时性。公司近期委派我负责一个新的嵌入式系统项目,因为是小型设备,所以我面临的第一个难题是需要找一个体积少,但非常灵活添加外围接口的嵌入式系统。…

建设网站中期建个网络平台多少钱

一 问题背景 经常会有画廊组件需要在当前展示给用户的页面进行下载功能。一般情况下下载按钮的UI曾经是和ViewPager同级的,而不是作为ViewPager中adapter对应的item一部分。 因此知道当前展示给用户的item页面及其bitmap在用户点击下载按钮时的处理,显…

优化型网站的好处客户关系管理的内涵

目录 一. 排序的概念及应用 1.1 排序的概念 1.2 常见的排序算法 二. 常见排序算法的实现(从小到大排序) 2.1 插入排序 2.1.1基本思想: 2.1.2 直接插入排序 2.1.3 希尔排序( 缩小增量排序) 2.2 选择排序 2.2.1基本思想: 2.2.2 直接选择排序: 2…

保定网站建设与seo没有公司 接单做网站

你说怎么好刚才写【图吧小白教程】散热常识 的时候参考了一些资料,为此咱跑了不少网站关注了不少公众号,这年头有意思,干啥都要关注微信,然后就能拿到资料,我寻思我写这么多文章也没打算给咱自己的微信公众号引流呢&am…

莆田做网站公司平面设计机构培训

目录 1.consul介绍 ❤️❤️❤️ 2.安装 ❤️❤️❤️ 3.创建8006模块 ❤️❤️❤️ 4.创建80模块❤️❤️❤️ 1.consul介绍 ❤️❤️❤️ Consul 是一种用于服务发现、配置和分布式一致性的开源软件。它由HashiCorp开发和维护,可用于帮助构建和管理现代化的分布…

可以在网上接网站做的网址县科协微网站建设

我对java的八大排序算法进行了总结,以此文展示Java八大算法 常见排序算法如下: 1.直接插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 8.基数排序 排序方法示例简介 直接插入排序 基本思想 通常人们整理桥牌的方法…

网站建设公司海南海南城乡与建设厅网站

🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL&…

网站建设销售年终总结有哪些做软件的网站有哪些

1.File类概述及构造方法 2.File类创建功能 文件创建成功! 如果文件不存在,就创建文件,并返回true 如果文件存在,就不创建文件,并返回false 如果文件夹不存在,就创建文件夹,并返回true 如果文件…