温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

面向切面编程(AOP模式)

发布时间:2020-07-23 21:42:13 来源:网络 阅读:210 作者:浅嫣 栏目:开发技术

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

原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html

Aspect Oriented Programming  面向切面编程。解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。

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

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

AOP 主要是利用代理模式的技术来实现的。
面向切面编程(AOP模式)

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

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


a.业务接口
面向切面编程(AOP模式)

b.业务实现
面向切面编程(AOP模式)


c.代理对象
面向切面编程(AOP模式)

d.测试类
面向切面编程(AOP模式)


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

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

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


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


a.代理类
面向切面编程(AOP模式)

b.测试类
面向切面编程(AOP模式)


输出结果会是:
 

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

 

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

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

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

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

3、利用cglib 

a.业务类
面向切面编程(AOP模式) 


b.代理类
面向切面编程(AOP模式) 


c.测试类
面向切面编程(AOP模式)

最后输出结果:
 

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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI