面向切面编程与系统设计的一点思考

毫无疑问,对于软件系统而言,业务逻辑处理单元是业务组件最核心的部分。但是,除了这些业务逻辑代码,通常情况下,还存在着大量的和业务逻辑无关的代码,用来处理在业务逻辑执行过程中的一些辅助功能。通常,这些代码和业务逻辑无关,但在执行的上下文中,这些代码也是必不可少的,用来保证软件的质量型需求,而非功能型需求。

一般情况下,这些代码都会被放置在业务逻辑代码指定的部分,或者代码执行的某个阶段,执行一些特定的任务,比如:日志记录,事务处理,安全验证,缓存等等。每一类这样的代码要执行的任务通常是一致的,却充斥在业务逻辑代码的各个部分,繁琐复杂,难以拆分,也难以修改。

AOP关注的是程序代码执行的过程,把业务逻辑代码中的某些特定的关注点(代码中执行某项特定任务的部分)从代码中抽取出来,这些抽取出来的代码,就是AOP中的核心概念:切面(方面)。如果程序组件能够只关注业务逻辑处理,这些所谓的切面代码能够在运行时动态的注入到可执行代码中,就可以简化开发,解除业务逻辑和关注点的耦合和增强系统的灵活性。

但是,对于大多数的高级语言,可执行代码都是预编译的,开发人员编写的程序代码一经编译,就无法被改变,那怎么实现切面的注入呢?

答案就是代理。在Java世界中,有两种类型的动态代理:即Java API中的基于接口的代理和字节码生成库。这两种方式都可以在运行时生成代理类,将切面代码注入到指定的方法中,从而实现业务逻辑和切面的拆分。

这很好,但有个问题,不管是基于接口的代理API,还是字节码类库,用来实现切面的注入还是过于复杂和繁琐,幸好,已经有很好的解决方案,可以帮助我们实现切面的注入,通过简洁的配置来实现这些系统行为,而无需编写这些令人厌恶的代码。比如 Spring AOP。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值