Java笔记——面向切面编程(AOP模式)

来源:互联网 发布:comic studio mac 编辑:程序博客网 时间:2024/06/15 18:50
Aspect Oriented Programming  面向切面编程。解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。

具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流。

AOP 在Spring框架中被作为核心组成部分之一,的确Spring将AOP发挥到很强大的功能。最常见的就是事务控制。工作之余,对于使用的工具,不免需要了解其所以然。学习了一下,写了些程序帮助理解。

AOP 主要是利用代理模式的技术来实现的。


============================

1、静态代理:就是设计模式中的proxy模式 


a.业务接口


b.业务实现



c.代理对象


d.测试类



从这段代码可以看出来,代理模式其实就是AOP的雏形。 上端代码中talk(String msg, String singname)是一个切面。在代理类中的sing(singname)方法是个后置处理方法。

这样就实现了,其他的辅助方法和业务方法的解耦。业务不需要专门去调用,而是走到talk方法,顺理成章的调用sing方法

再从这段代码看:1、要实现代理方式,必须要定义接口。2、每个业务类,需要一个代理类。


============================
 
2、动态代理:jdk1.5中提供,利用反射。实现InvocationHandler接口。 


a.代理类


b.测试类



输出结果会是:
 

切面之前执行
people talk业务说法
切面之后执行

 

说明只要在业务调用方法切面之前,是可以动态的加入需要处理的方法。

从代码来看,如果再建立一个业务模块,也只需要一个代理类。ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk());  将业务接口和业务类绑定到动态代理类。

但是这种方式:还是需要定义接口。

 ============================

3、利用cglib 

a.业务类
 


b.代理类
 


c.测试类


最后输出结果:
 

事物开始
people talk业务方法
事物结束
事物开始
spreak chinese业务方法
事物结束


原创粉丝点击