aop有几种通知类型(spring aop静态和动态的区别)
本文目录
spring aop静态和动态的区别
原理AOP(Aspect Oriented Programming),也就是面向方面编程的技术。AOP基于IoC基础,是对OOP的有益补充。 AOP将应用系统分为两部分,核心业务逻辑(Core business concerns)及横向的通用逻辑,也就是所谓的方面Crosscutting enterprise concerns,例如,所有大中型应用都要涉及到的持久化管理(Persistent)、事务管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和调试管理(Debugging)等。 AOP正在成为软件开发的下一个光环。使用AOP,你可以将处理aspect的代码注入主程序,通常主程序的主要目的并不在于处理这些aspect。AOP可以防止代码混乱。 Spring framework是很有前途的AOP技术。作为一种非侵略性的、轻型的AOP framework,你无需使用预编译器或其他的元标签,便可以在Java程序中使用它。这意味着开发团队里只需一人要对付AOP framework,其他人还是像往常一样编程。AOP概念 让我们从定义一些重要的AOP概念开始。 — 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的Advisor或拦截器实现。 — 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。 — 通知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。 — 切入点(Pointcut):指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点,例如,使用正则表达式。 — 引入(Introduction):添加方法或字段到被通知的类。Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现IsModified接口,来简化缓存。 — 目标对象(Target Object):包含连接点的对象,也被称作被通知或被代理对象。 — AOP代理(AOP Proxy):AOP框架创建的对象,包含通知。在Spring中,AOP代理可以是JDK动态代理或CGLIB代理。 — 编织(Weaving):组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。
spring框架aop中的advice封装了目标对象的横切逻辑,它有几种类型
AOP面向方面编程advice指定Aspect的作用时机,spring提供了以下的通知类型,对应不同的作用时机:1前置通知:《aop:before》先执行方面逻辑,再执行目标方法;2后置通知:《aop:after-returning》先执行目标方法,如果不出现异常,再执行方面逻辑;3异常通知:《aop:after-throwing》先执行目标方法,如果出现异常,再执行方面逻辑;4最终通知:《aop:after》先执行目标方法,有无异常都再执行方面逻辑;(类似于finally的作用)5环绕通知:前置+后置,先执行方面的前一部分,再执行目标方法,最后执行方面的剩余部分。纯手打,哦
spring aop 环绕通知around和其他通知的区别
spring 的环绕通知和前置通知,后置通知有着很大的区别,主要有两个重要的区别:1) 目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,而前置和后置通知 是不能决定的,他们只是在方法的调用前后执行通知而已,即目标方法肯定是要执行的。2) 环绕通知可以控制返回对象,即你可以返回一个与目标对象完全不同的返回值,虽然这很危险,但是你却可以办到。而后置方法是无法办到的,因为他是在目标方法返回值后调用 这里是经过我自己测试的过的例子,使用面向切面来处理一些问公共的问题,比如,权限管理,事务的委托下面的例子就是使用环绕通知,当程序发生异常时,重复提交请求,重复的次数是可以设定的 当我们开发企业级应用时,通常会想要从几个切面来引用模块化的应用和特定操作的集合,下面是一个典型的通用切面,看起来可能像下面这样(这也是Spring文档里的)
aop原理是什么
aop原理:
AOP将业务逻辑组件和切面类都加入到容器中,负责在业务逻辑运行的时候将日志进行打印,切面类负责动态感知MathCalculator.div运行到哪里然后执行。通过@Aspect通知注解给切面类的目标方法标注何时何地运行。
在程序创建之前会根据切入点表达式对增强器进行一一匹配,最终拿到所有的增强器。创建代理对象过程中,会先创建一个代理工厂,获取到所有的增强器(通知方法),将这些增强器和目标类注入代理工厂,再用代理工厂创建对象。
AOP的组成:
1、方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的Advisor或拦截器实现。
2、连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
3、通知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。
更多文章:
springboot教程(SpringBoot究竟是如何跑起来的)
2024年7月7日 03:41
vbscript使用教学(VBscript中注释有哪些方式)
2024年7月10日 19:44
anaconda装好如何打开python(安装Anaconda3 后,怎样使用 Python 2.7)
2024年7月20日 00:18
js和php怎么进行数据交互(如何把JS获取的数据传递给php)
2024年9月2日 04:45
distinctiveness is an essential(essential怎么读)
2024年8月3日 21:35
selected什么意思中文(这里的selected是什么意思)
2024年7月13日 06:52
serverless 框架(不会别答,不然差评,如何配置serverless前端node项目)
2024年7月2日 05:10
founder是什么意思(founder effect是什么意思)
2024年5月11日 17:51
sql count 统计每种个数(sql 统计每个类型有多少数量,类型包含 某字符为同)
2024年7月22日 11:13
免费网站谁有靠谱的2021(什么网站相亲最靠谱有免费,相亲网站哪个比较靠谱)
2024年5月9日 08:11