Java的面向AOP编程

这里写图片描述

一、 引言

AOP(Aspect-Oriented Programming,面向切面的编程),是一种新型的编程范式,主张关注软件流程中的一个切面,将同样功能的代码整合打包在一起,降低系统的耦合性,增强其扩展性。

传统的软件设计,往往采取事件驱动模型带来类似的效果,通过在可能的事件切入点插入事件回调函数,将对应位置插入外置代码。

函数式编程,也有类似的解决方案,通过函数传递,将对应位置的扩展上新的功能。

Java作为一门严谨的传统式开发语言,以安全性和可靠性为第一标准,语言并没有过多的新特性支持,Java8仅支持到lambda表达式,为了使Java具有更强大的编程模型,Spring等框架使用gclib库实现了面向切面的编程模型。

二、 CGLIB 和 ASM

CGLIB 是一个强大的,高性能,高质量的Code生成类库,被广泛的用作动态代理技术。CGLIB 包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类,新的字节码可以被Java虚拟机直接加载运行。

其实动态代理并不是CGLIB的专利,早在JDK1.3版起,就引入了动态代理库,Spring AOP 编程时就可以进行选择,使用JDK提供的动态代理库,或者是引入CGLIB库。

下面举一个实例,来说明一些如何使用CGLIB库,将我们本来应该正常执行的函数调用,进行截断操作。

package com.abs.testcglib;

public class Service {
    String name;

    public Service(String name) {
        this.name = name;
    }

    public void sayHello() {
        System.out.println("Hello "+name);
    }
}

首先,我们创建一个服务类,其中有一个sayHello() 方法,我们希望将这个方法截断,以添加其余组件的一些处理功能,例如持久化组件希望在此添加一条记录一类的功能。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值