了解春季 AOP [已关闭]
我正在使用Spring 3.0框架,仍然是一个新手。任何人都可以用外行的术语解释一下什么是AOP编程?(一个简短的例子肯定会有所帮助)
Spring如何整合/增强/支持它?
我正在使用Spring 3.0框架,仍然是一个新手。任何人都可以用外行的术语解释一下什么是AOP编程?(一个简短的例子肯定会有所帮助)
Spring如何整合/增强/支持它?
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进行设置。因此,现在 my.service 包下的所有方法都将按以下方式记录。
<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>
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("<whatever makes sense>");
logger.error(msg.toString());
}
}
也来看看这个相关的问题:-