面向切面总是听起来很抽象,而且像把数据验证也算作切面上的一层,总觉得有些牵强,但是如果根据程序线性执行的原则,可以把各层抽离开来,重新排布成下面这种面向过程的图案:

如图所示,我们可以在不同的方法执行过程中,找到具有相同需求、执行相同任务的步骤,因此可以抽出这些相同的部分,全局配置,进行一次开发,到处运行,而不是手动编码或者重复引用,从而解除耦合,减少代码维护成本。
在实际编程中,总会遇到各种不同需求,代码本身的或者业务的。在项目达到一定规模,有必要针对各类重复开发或引用方法的地方,运用面向切面的思想,进行整体配置和开发。
附:
定义切入点:
@Aspect
public class PointcutsDefinition {
// 定义可重用、有意义的签名的切入点
@Pointcut("execution(* com.shiyanlou.spring.aop.aspectJ.CustomerBo.*(..))")
public void customerLog() {
}
}
定义切面执行项:
@Aspect
public class LoggingAspect {
// 在此处直接引用上述定义好的切入点
@Before("com.shiyanlou.spring.aop.aspectJ.PointcutsDefinition.customerLog()")
public void logBefore(JoinPoint joinPoint){
System.out.println("logBefore() is running ...");
System.out.println("hijacked:"+joinPoint.getSignature().getName());
System.out.println("**********");
}
}
定义bean:
<aop:aspectj-autoproxy/> <!-- 开启aspect自动代理-->
<bean id="customerBo" class="com.shiyanlou.spring.aop.aspectJ.CustomerBo"/>
<bean id="logAspect" class="com.shiyanlou.spring.aop.aspectJ.LoggingAspect" />
本文深入探讨了面向切面编程(AOP)的核心概念及其在软件开发中的应用。通过将横切关注点从核心业务逻辑中分离出来,AOP能够有效降低代码耦合度,减少重复代码,提高系统的可维护性和可扩展性。文章详细介绍了如何定义切入点、切面执行项,并展示了如何在Spring框架下配置AOP,以实现方法调用前后的日志记录。
8650

被折叠的 条评论
为什么被折叠?



