首页>>后端>>Spring->aop切面编程?

aop切面编程?

时间:2023-12-01 本站 点击:0

AOP是什么意思?

AOP为Aspect

Oriented

Programming的缩写,是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。

AOP的出现弥补了OOP的这点不足,AOP

是一个概念,一个规范,本身并没有设定具体语言的实现,AOP是基于动态代理模式。AOP是方法级别的,要测试的方法不能为static修饰,因为接口中不能存在静态方法,编译就会报错。

AOP可以分离业务代码和关注点代码(重复代码),在执行业务代码时,动态的注入关注点代码。切面就是关注点代码形成的类。Spring

AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。

扩展资料

AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ。而动态代理则以Spring

AOP为代表,静态代理是编译期实现,动态代理是运行期实现,可想而知前者拥有更好的性能。

静态代理是编译阶段生成AOP代理类,也就是说生成的字节码就织入了增强后的AOP对象;动态代理则不会修改字节码,而是在内存中临时生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

参考资料来源;搜狗百科--AOP

什么是AOP、IOC他们的作用是什么?

什么是IoC

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:

控制是什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

IoC能做什么

IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

IoC和DI

DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

注:如果想要更加深入的了解IoC和DI,请参考大师级人物Martin Fowler的一篇经典文章《Inversion of Control Containers and the Dependency Injection pattern》,原文地址:。

AOP:面向切面编程

什么是AOP:

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

简单的说:就是将程序中重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。

AOP的作用和优势:

作用:从定义中来看,就是为了在程序运行期间,不修改源码对已有方法进行增强。

优势:减少重复代码 提交了开发效率 维护方便

实现方式: 就是动态代理的技术

具体的作用:实现事务的控制 日志 和 安全模块

想系统的学习编程可以来我这看看,希望对您有所帮助!~

怎么给某个方法加aop

您好,给某个方法加AOP,首先需要了解什么是AOP,AOP(面向切面编程)是一种编程技术,它可以帮助开发人员把一些公共的行为抽离出来,并将其封装在一个可重用的模块中,以便在不同的类中复用,从而提高代码的可重用性和可维护性。

要给某个方法加AOP,需要做以下几步:

1. 定义切面:首先需要定义一个切面,切面是一个模块,它包含了一组公共行为,比如日志记录、权限检查等;

2. 定义切入点:切入点是一个指定的方法,它定义了切面应该在什么地方被应用;

3. 定义通知:通知是一个模块,它定义了切面应该在什么时候被应用,比如在方法执行前、执行后或者抛出异常时;

4. 将切面应用到指定的方法上:最后,将切面应用到指定的方法上,以便在方法执行前后执行切面中定义的行为。

以上就是给某个方法加AOP的步骤,希望能够帮助您。

什么是面向切面编程

Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。比如我们最常见的就是日志记录了,举个例子,我们现在提供一个查询学生信息的服务,但是我们希望记录有谁进行了这个查询。如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现 类 (StudentInfoServiceImpl.java),同时为了要进行记录的话,那我们在实现类(StudentInfoServiceImpl.java)中要添加其实现记录的过程。这样的话,假如我们要实现的服务有多个呢?那就要在每个实现的类都添加这些记录过程。这样做的话就会有点繁琐,而且每个实现类都与记录服务日志的行为紧耦合,违反了面向对象的规则。那么怎样才能把记录服务的行为与业务处理过程中分离出来呢?看起来好像就是查询学生的服务自己在进行,但却是背后日志记录对这些行为进行记录,并且查询学生的服务不知道存在这些记录过程,这就是我们要讨论AOP的目的所在。AOP的编程,好像就是把我们在某个方面的功能提出来与一批对象进行隔离,这样与一批对象之间降低了耦合性,可以就某个功能进行编程。

Spring - 切面表达式(切面编程AOP)

这里用后置通知与返回通知及异常通知、环绕通知为例,演示切面表达式及一些与切面有关的额外内容。

第1个*代表任意修复符

第2个*代表任意返回值

第3个*代表ml.cathome.aspectj下的所有类

第4个*代表ml.cathome.aspectj下所有类的所有方法

..代表任意多、任意类型的参数。

如需指定异常才捕获,可以将Exception替换成需要的异常类即可。

注意:环绕通知必须返回Object类型。

细聊AOP理论

1、什么是AOP

AOP(Aspect Orient Programming) : 面向切面编程

Aspect :表示切面, 给业务方法增加的功能,叫做切面。 切面一般都是非业务功能, 而且切面功能一般都是可以复用的。 例如 日志功能, 事务功能, 权限检查,参数检查, 统计信息等等。

Orient:面向,对着

Programming:编程。

2、 怎么理解面向切面编程 ? 以切面为核心设计开发你的应用。

1)设计项目时, 找出切面的功能。

2)安排切面的执行时间, 执行的位置。

3、AOP的作用:

1)让切面功能复用

2)让开发人员专注业务逻辑。 提高开发效率

3)实现业务功能和其他非业务功能解耦合。

4)给存在的业务方法, 增加功能,不用修改原来的代码

4、AOP中术语

1)Aspect:切面, 给业务方法增加的功能。

2)JoinPoint:连接点, 连接切面的业务方法。 在这个业务方法执行时,会同时执行切面的功能。

3)Pointcut: 切入点, 是一个或多个连接点集合。 表示这些方法执行时,都能增加切面的功能。

表示切面执行的位置。

4)target: 目标对象, 给那个对象增加切面的功能, 这个对象就是目标对象。

5)Advice:通知(增强),表示切面的执行时间。 在目标方法之前执行切面,还是目标方法之后执行切面。

AOP中重要的三个要素: Aspect, Pointcut , Advice. 这个概念的理解是: 在Advice的时间,在Pointcut的位置, 执行Aspect

AOP是一个动态的思想。 在程序运行期间,创建代理(ServcieProxy),使用代理执行方法时,增加切面的功能。这个代理对象是存在内存中的。

5、什么时候你想用AOP

你要给某些方法 增加相同的一些功能。 源代码不能改。 给业务方法增加非业务功能,也可以使用AOP

6、AOP技术思想的实现

使用框架实现AOP。 实现AOP的框架有很多。 有名的两个

1) Spring : Spring框架实现AOP思想中的部分功能。 Spring框架实现AOP的操作比较繁琐,比重。

2) Aspectj : 独立的框架,专门是AOP。 属于Eclipse

7、通知

Aspectj表示切面执行时间,用的通知(Advice)。 这个通知可以使用注解表示。

讲5个注解, 表示切面的5个执行时间, 这些注解叫做通知注解。

@Before : 前置通知

@AfterRetunring: 后置通知

@Around: 环绕通知

@AfterThrowing:异常通知

@After:最终通知

8、Pointcut 位置

Pointcut 用来表示切面执行的位置, 使用Aspectj中切入点表达式。


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