了解Spring AOP

我正在使用Spring 3.0框架,仍然是一个新手。 任何人都可以用外行术语解释我的AOP编程是什么? (一个简短的例子肯定会有帮助)

Spring如何整合/增强/支持它?

AOP是一种修改代码库中现有类的方法,用于修饰它们或根据单独定义的规则更改其行为。 这种修改可以在将类放入jar / war之前完成,也可以在加载代码时动态发生。

我们的想法是,您不是在源代码中找到要修改的所有代码点并手动修改它们,而是定义如何在代码库中查找兴趣点的规则,以及您希望对代码执行哪些修饰。他们。 这些规则称为方面( AOPA )。

原型示例是您希望获得有关代码库中各种方法的时序信息。 您可以找到所有感兴趣的方法,并在顶部拨打电话

long start = System.currentTimeMillis(); 

最后呢

 long end = System.currentTimeMillis(); System.out.println("Method time is: " + (end - start)); 

但那是:

  1. 可能是一堆工作
  2. 临时的,你不想搞砸你的代码库

您可以改为定义要说明要修改哪些方法的方面,以及要在这些方法的开头和结尾处执行操作的方面。

当应用AOP时,无论是在jar创建时还是在类加载时,都就像你最初编写类一样。

AOP是用于模块化横切特征的图案。 因此,如果某个“事物”适用于您的代码中的重要部分,那么您可以使用AOP来解决该问题。 这些“事物”被称为方面。

以下示例:

跨企业应用程序使用exception记录器。 所以你可以通过以下方式使用AOP进行设置。 所以现在my.service包下的所有方法都会以下面的方式记录。

         

ExceptionLogger类可能如下所示: –

 public class ExceptionLogger { private static Logger logger = Logger.getLogger(ExceptionLogger.class); public void logIt(JoinPoint jp, Exception e) { StringBuilder msg = new StringBuilder(); msg.append(""); logger.error(msg.toString()); } } 

另请看一下这个相关的问题: –

  1. 在春季项目中AOP最常见的用途是什么

面向方面编程是一种明智的新方法,它不能取代面向对象编程。 事实上,AOP是组织程序结构的另一种方式。

为了更清楚,我将使用一些图表:1。什么是Aspect?

 |---------------------|------------------|------------------| | Aspect = Point cut + Advice | |---------------------|------------------|------------------| | | Where the aspect | What code is | | | is applied | executed. | |---------------------|------------------|------------------| 

Aspect = Point cut + Advice

  1. 建议方法的类型

在此处输入图像描述 3.方面示例

 @Around( "execution(* *(..))" ) public Object trace(ProceedingJoinPointproceedingJP)throwsThrowable{ String methodInformation= proceedingJP.getStaticPart().getSignature().toString(); logger.trace("Entering "+methodInformation); try{ returnproceedingJP.proceed(); } catch(Throwable ex) { logger.error("Exception in "+methodInformation, ex); throw ex; } finally { logger.trace("Exiting "+methodInformation); } } 

简而言之,AOP是一个数学家解释如何整齐地组织代码以避免在特定模块或对象中分散碎片的特定function的方式。 从本质上讲,无论是否称为AOP,AOP都是一件好事。

但是您面临着特定的AOP实现,需要弄清楚如何使用它。 我认为最好的方法是寻找人们发布食谱的博客以及他们如何在Spring中使用它的示例。 通过这种方式,您可以绕过数学家,并阅读更多与现实接触的工程师的着作。

有两种计算机科学家,数学家喜欢晦涩难懂,使用折磨的术语来解释简单的事情,工程师会一步一步地告诉你如何构建软件。 工作程序员往往更倾向于工程师的思维方式,因为抽象思想家发现很难处理获得经验的长期困境。 这就是为什么你发现AOP难以理解的原因。 不是因为它很难理解,而是因为抽象的数学思想家对“普通英语”并不十分熟悉,因此解释得很糟糕。

我想知道如果AOP大师与function点分析大师坐下来会发生什么。

最重要的是,你必须深入理解AOP术语,例如:advice,pointcut,joinpoint ..etc。 以下链接是关于AOP术语的摘要: AOP术语

AOP通过将“切割问题”分离(模块)到方面,实现了凝聚力的发展。 简单来说,它只是拦截一些进程的拦截器,例如,当一个方法执行时,Spring AOP可以劫持执行方法,并在方法执行之前或之后添加额外的function。

例如:日志记录,事务和安全性是一些方面 。 在日志记录中,我们可能有不同的方面,即时间计算日志记录,简单的输入和输出消息记录等等。

  • 建议定义了需要应用的内容。
  • Joinpoint建议适用的地方。
  • 切入点是不同联合点的组合。
  • Aspect正在Pointcuts上应用建议

注意:对于标记为final的方法,Spring不支持AOP。

在此处输入图像描述

资源


AOP的工作方式类似于面向对象编程。 在面向对象编程中,模块化单元是对象但在面向方面编程中,模块化单元是AspectAspect作为AOP中被称为横切关注点的关注点的模块化。 AOP框架可以在spring插入。 AOP提供声明性企业服务,并允许用户实现自定义方面。

资源


Spring使用AOP提供声明性编程。 这是实现跨领域关注点的更好方法,无需在整个核心业务类中使用管道代码 。 AOP使您能够考虑系统中的问题或方面。 典型的问题是事务管理,日志记录等。通过AOP,您可以捕获拦截器等模块中的交叉代码,这些代码可以声明性地应用于它们表达的关注点。 Spring包含一个基于代理的AOP框架。

资源