Java 理解springaop
我正在使用Spring3.0框架,还是个新手。有人能用外行的术语解释一下什么是AOP编程吗?(举个简单的例子肯定会有帮助) Spring如何整合/增强/支持它?是一种用于模块化横切功能的模式。因此,如果有某个“东西”适用于代码中的重要部分,那么您可以使用AOP来解决该问题。这些“事物”称为方面 下面是一个例子: 在整个企业应用程序中使用异常记录器。因此,您可以通过以下方式使用AOP进行设置。因此,现在my.service包下的所有方法都将按以下方式记录Java 理解springaop,java,spring,aop,aspectj,Java,Spring,Aop,Aspectj,我正在使用Spring3.0框架,还是个新手。有人能用外行的术语解释一下什么是AOP编程吗?(举个简单的例子肯定会有帮助) Spring如何整合/增强/支持它?是一种用于模块化横切功能的模式。因此,如果有某个“东西”适用于代码中的重要部分,那么您可以使用AOP来解决该问题。这些“事物”称为方面 下面是一个例子: 在整个企业应用程序中使用异常记录器。因此,您可以通过以下方式使用AOP进行设置。因此,现在my.service包下的所有方法都将按以下方式记录 <bean id="except
<bean id="exceptionLogger" class="my.good.ExceptionLogger" />
<aop:config>
<aop:pointcut id="allServiceMethods" expression="execution(* my.service.*(..))" />
<aop:aspect id="serviceLogger" ref="exceptionLogger">
<aop:after-throwing pointcut-ref="allServiceMethods"
method="logIt"
throwing="e"/>
</aop:aspect>
</aop:config>
AOP是一种修改代码库中现有类的方法,可以根据单独定义的规则对它们进行修饰或更改它们的行为。这种修改可以在类放入jar/war之前完成,也可以在加载代码时动态进行
其思想是,与其在源代码中找到您想要修改的所有代码点并手动修改它们,不如定义如何在代码库中找到感兴趣的点的规则,以及您希望对它们进行哪些修饰。这些规则称为方面(AOP的A)
典型的例子是,您希望获得一些关于代码库中各种方法的计时信息。你可以找到所有感兴趣的方法,并在顶部调用
long start = System.currentTimeMillis();
最后你要做什么
long end = System.currentTimeMillis();
System.out.println("Method time is: " + (end - start));
但这是:
可能是一堆工作
临时的,并且你不想弄乱你的代码库
相反,您可以定义一些方面,说明您想要修改哪些方法,以及您想要在这些方法的开头和结尾做些什么
当应用AOP时,无论是在jar创建时,还是在类加载时,就好像您最初是这样编写类的。简而言之,AOP是数学家解释如何整齐地组织代码,以避免特定功能分散在许多模块或对象中。从本质上讲,AOP是一件好事,不管它是否被称为AOP
但是您面临着一个特定的AOP实现,需要弄清楚如何使用它。我认为最好的方法是寻找博客,人们在博客上发布食谱和他们如何使用Spring的例子。通过这种方式,你可以绕过数学学家,阅读更贴近现实的工程师的著作
有两种计算机科学家,一种是喜欢晦涩难懂的数学家,他们用扭曲的术语解释简单的事情,另一种是工程师,他们会一步一步地告诉你如何构建软件。在职程序员更倾向于工程师思维,因为抽象思考者发现很难处理获得经验的漫长过程。这就是为什么你觉得AOP很难理解。不是因为它很难理解,而是因为抽象的数学思考者对它的解释太差,他们对“普通英语”并不十分熟悉
我想知道如果AOP专家与功能点分析专家坐在一起会发生什么。AOP通过将横切关注点分离(模块)到方面来实现内聚开发。简单地说,它只是一个拦截器来拦截一些进程,例如,当一个方法被执行时,SpringAOP可以劫持执行的方法,并在方法执行之前或之后添加额外的功能
例如:日志、事务和安全是一些方面。在日志记录方面,我们可能有不同的方面,即时间计算日志记录、简单的输入和输出消息日志记录等
- 建议定义需要应用的内容
- Joinpoint是应用建议的地方
- 切入点是不同连接点的组合
- 方面正在切入点应用建议李>
注意:对于标记为final的方法,Spring不支持AOP
AOP的工作原理类似于面向对象编程。在面向对象编程中,模块化的单位是对象,但在面向方面编程中,模块化的单位是方面方面是AOP中被称为横切关注点的关注点的模块化。AOP框架在spring中是可插入的。AOP提供声明性企业服务,并允许用户实现自定义方面
Spring使用AOP提供声明式编程。这是实现横切关注点的更好方法,而无需在所有核心业务类中使用管道代码。AOP使您能够考虑系统中的问题或方面。典型的关注点是事务管理、日志记录等。AOP使您能够捕获模块(如拦截器)中的横切代码,这些模块可以声明性地应用于它们表示的关注点应用的任何地方。Spring包括一个基于代理的AOP框架
面向方面编程是一种全新的编程方式,它不能替代面向对象编程。事实上,AOP是组织程序结构的另一种方式
为了更清楚,我将使用一些图表:
什么是方面
|---------------------|------------------|------------------|
| Aspect = Point cut + Advice |
|---------------------|------------------|------------------|
| | Where the aspect | What code is |
| | is applied | executed. |
|---------------------|------------------|------------------|
方面=切入点+建议
建议方法的类型
方面示例
@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,但我对所有模糊的术语和使用的抽象语言感到困惑(我小小的大脑在试图处理术语时关闭了),我开始行动,at的第三版对使用Spring进行面向方面编程给出了极好的解释。我建议您按照本教程从理论到代码e进行学习
@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);
}
}