Spring Aop总结

一、什么是AOP

面向方面的编程(AOP)是一种编程技术,是面向对象编程的补充,它也提供了模块化。

在面向对象编程中,关键的单元是对象,AOP的关键单元是切面,或者说关注点。一些切面可能有集中的代码,但是有些可能被分散或者混杂在一起,它允许程序员模块化横切关注点或行为,这些问题或行为跨越典型的责任分工,例如日志记录和事务管理。

二、关注点和横切关注点

(1)关注点

应用的模块中实现的行为。关注点可以被定义为:我们想实现以解决特定业务问题的方法。
(2)横切关注点

贯穿整个应用程序的关注点。像日志、安全和数据转换,它们在应用的每一个模块都是必须的,所以他们是一种横切关注点。

三、AOP 术语

1、连接点(Joinpoint)
连接点描述的是程序执行的某个特定位置

2、切入点(Pointcut)
切入点是一个连接点的过滤条件,AOP 通过切点定位到特定的连接点

3、通知(Advice)、增强或横切关注点
切面在某个具体的连接点采取的行为或行动,称为通知。

切面的核心逻辑代码都写在通知中,有人也称之为增强或者横切关注点。

通知是切面功能的具体实现,通常是业务代码以外的需求,如日志、验证等,这些被模块化的特殊对象

4、通知器(Advisor)
通知器由一个切入点(pointcut)和一个通知(Advice)组成。通知就是增强的那部分功能代码,如记录日志代码、控制权限代码

5. 切面(Aspect)
与通知器(advisor)类似都是通知+切入点。区别在于,切面中的类无需实现通知接口,但需要在配置文件中指定类中的方法名;

而通知器仅需指定类名即可,因为通知器中的类都实现了通知接口,很明确的知道通知方法是哪个。

6、目标(Target)
被通知的对象(方法)

7、代理(Proxy)
向目标对象应用通知之后创建的对象

8、引介(Introduction)

引介是一种特殊的增强,它为类添加一些属性和方法。

即使一个业务类原本没有实现某个接口,通过AOP的引介功能,我们可以动态地为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类

9、织入(weaving)
织入是将切面与外部的应用类型或者类连接起来以创建通知对象(adviced object)的过程。

三种织入的方式:
a、编译期织入,这要求使用特殊的Java编译器。
b、类装载期织入,这要求使用特殊的类装载器。
c、动态代理织入,在运行期为目标类添加增强生成子类的方式。
Spring采用动态代理织入,而AspectJ采用编译期织入和类加载期织入。
AspectJ:编译时织入、后编译时织入(post-compile-time weaving)、类加载时织入(load-time weaving, LTW)
 

四、AOP可用的实现

基于Java的主要AOP实现有:

AspectJ
Spring AOP
JBoss AOP

五、AOP的通知类型

通知(advice)是在程序中想要应用在其他模块中的横切关注点的实现。

Advice主要有以下5种类型:

1、前置通知(Before Advice):@Before

2、返回之后通知(After Retuning Advice):@AfterReturning

3、抛出(异常)后执行通知(After Throwing Advice):@AfterThrowing 

4、后置通知(After Advice):无论连接点是通过什么方式退出,@After 

5、围绕通知(Around Advice): @Around 

六、AOP 代理

代理是使用非常广泛的设计模式。Spring AOP是基于代理实现的
AOP 代理是一个由 AOP 框架创建的用于在运行时实现切面协议的对象
Spring AOP默认为 AOP 代理使用标准的 JDK 动态代理
Spring AOP 也可以使用 CGLIB 代理


 

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

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

相关文章

P3750-[六省联考2017]分手是祝愿【期望dp】

正题 题目链接:https://www.luogu.org/problem/P3750 题目大意 nnn盏灯和按钮,每次随机选择一个xxx按下后会让xxx的倍数的灯都取反,然后若最少kkk步就可以将所有灯关闭那么直接选择最优策略,求关闭所有灯的期望次数。 解题思路 做期望dpdpd…

使用WebApiClient请求和管理Restful Api

前言本篇文章的内容是WebApiClient应用说明篇,如果你没有了解过WebApiClient,可以先阅读以下相关文章:WebApi client 的面向切面编程我来给.Net设计一款HttpClient.Net45下HttpClient的几个缺陷.net的retrofit--WebApiClient库.net的retrofit…

Spring MVC总结

一、Spring MVC (1)介绍 Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架。 通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分&…

拥抱.NET Core系列:MemoryCache 缓存选项

MSCache项目MSCache 目前最新的正式版是 2.0.0,预览版是2.1.0,会与 .NETCore 2.1 一起发布。本篇用了2.0.0版本开源在 GitHub 上,仓库地址是:https://github.com/aspnet/CachingNuGet地址为:https://www.nuget.org/pac…

牛客练习赛51-记录

正题 比赛链接:https://ac.nowcoder.com/acm/contest/1083#question 成绩 可怜的zycT3zycT3zycT3被n0n0n0卡了半天,这里感谢一下排雷 总结 比赛状态较好,后面没有T6T6T6的题解 T1:abcT1:abcT1:abc 题目大意 给出一个字符串,求有多少个abc…

SpringBoot总结

一、SpringBoot (1)简介 SpringFramework:最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。使用 DI 或者是 IOC 的时候,可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。 Spring MVC&…

Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警

前言这次主要分享通过Metrics.net influxdb grafana 构建WebAPI的自动化监控和预警方案。通过执行耗时,定位哪些接口拖累了服务的性能;通过请求频次,设置适当的限流和熔断机制,拦截非法或不合理的请求,保障服务的可用…

jzoj6342-[NOIP2019模拟2019.9.7]Tiny Counting【树状数组,容斥】

正题 题目大意 一个序列SSS&#xff0c;求有多少个互不相同的4元组(a,b,c,d)(a,b,c,d)(a,b,c,d)使得a<b且Sa<Sba<b且S_a<S_ba<b且Sa​<Sb​ c<b且Sc>Sdc<b且S_c>S_dc<b且Sc​>Sd​ 解题思路 若可以重复其实答案就是逆序对个数乘上正序对…

jzoj6343-[NOIP2019模拟2019.9.7]Medium Counting【记忆化dfs,dp】

正题 题目大意 给出nnn个字符串SiS_iSi​&#xff0c;然后有些???号可以进行随便填字母。 然后要求Si<Si1S_i<S_{i1}Si​<Si1​的情况下求方案数。 解题思路 定义fl,r,p,cf_{l,r,p,c}fl,r,p,c​表示只考虑l∼rl\sim rl∼r的字符串&#xff0c;只考虑ppp往后的字…

EF Core 2.1路线图:视图、GROUP BY和惰性加载

Entity Framework Core一直追随着初始Entity Framework的发展&#xff0c;并不断推陈出新。它首先推出的是对视图的支持&#xff0c;这听起来有些耸人听闻。在即将推出的EF Core 2.1之前&#xff0c;EF Core并未对数据库视图提供官方的支持&#xff0c;也不支持缺少主键的数据库…

计算机网络总结

一、计算机网络体系 &#xff08;1&#xff09;OSI分层 &#xff08;7层&#xff09; 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 &#xff08;2&#xff09;TCP/IP分层&#xff08;4层&#xff09; 网络接口层、 网际层、运输层、 应用层。 &#xff0…

从技术角度讨论微服务

本文希望从技术角度来探讨下微服务&#xff0c;因此&#xff0c;不会过多地谈及如何根据业务进行微服务划分&#xff0c;更多是介绍微服务的相关技术&#xff0c;微服务的业务划分方法可参考“领域驱动设计“相关方法论。微服务的两个程度一、服务化复杂的单体架构会有以下的挑…

jzoj6344-[NOIP2019模拟2019.9.7]Huge Counting【组合数,状压dp】

正题 题目大意 定义函数f(x)(xf(x)(xf(x)(x为一个序列))) 若任意一个xi1x_i1xi​1那么有f(x)1f(x)1f(x)1 若有一个xi0x_i0xi​0那么有f(x)0f(x)0f(x)0 其他的&#xff0c;有f(x)(∑j1nf(x1...,xj−1,...xn))%2f(x)(\sum_{j1}^nf(x_{1}...,x_j-1,...x_n))\% 2f(x)(j1∑n​f(x1​…

拥抱.NET Core系列:MemoryCache 缓存域

MSCache项目MSCache 目前最新的正式版是 2.0.0&#xff0c;预览版是2.1.0&#xff0c;会与 .NETCore 2.1 一起发布。本篇用了2.0.0版本开源在 GitHub 上&#xff0c;仓库地址是&#xff1a;https://github.com/aspnet/CachingNuGet地址为&#xff1a;https://www.nuget.org/pac…

牛客小白月赛17-记录(附题解)

正题 比赛链接:https://ac.nowcoder.com/acm/contest/1085#question 成绩 总结 除了那道积分数学其他还好 后面没有FFF题的题解 T1:小sun的假期T1:小sun的假期T1:小sun的假期 题目大意 长度为nnn的序列&#xff0c;mmm个区间&#xff0c;求最大的没有被任何区间覆盖的区间…

安全、高效的MySQL DDL解决方案

MySQL作为目前应用最广泛的开源关系型数据库&#xff0c;是许多网站、应用和商业产品的主要数据存储。在生产环境&#xff0c;线上数据库常常面临着持续的、不断变化的表结构修改&#xff08;DDL&#xff09;&#xff0c;如增加、更改、删除字段和索引等等。其中一些DDL操作在M…

DNS总结

一、DNS &#xff08;1&#xff09;简介 域名系统&#xff08;英文&#xff1a;Domain Name System&#xff0c;缩写&#xff1a;DNS&#xff09;是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便地访问互联网。 DNS 协议也是…

谈谈在.NET Core中使用Redis和Memcached的序列化问题

前言在使用分布式缓存的时候&#xff0c;都不可避免的要做这样一步操作&#xff0c;将数据序列化后再存储到缓存中去。序列化这一操作&#xff0c;或许是显式的&#xff0c;或许是隐式的&#xff0c;这个取决于使用的package是否有帮我们做这样一件事。本文会拿在.NET Core环境…

牛客练习赛52-记录

正题 比赛链接:https://ac.nowcoder.com/acm/contest/1084#question 成绩 T1:T1:T1:数数 题目大意 给出nnn&#xff0c;求∑i1n∑j1n(i∗j)\sum_{i1}^n \sum_{j1}^n (i*j)i1∑n​j1∑n​(i∗j) 和 ∏i1n∏j1n(i∗j)\prod_{i1}^n\prod_{j1}^n(i*j)i1∏n​j1∏n​(i∗j) 解题…

Java 并发总结——高并发与同步锁

一、高并发同步锁 &#xff08;1&#xff09;ThreadLocal threadLocal为每个线程维护一个本地变量。 采用空间换时间&#xff0c;它用于线程间的数据隔离&#xff0c;为每一个使用该变量的线程提供一个副本&#xff0c;每个线程都可以独立地改变自己的副本&#xff0c;而不会…