AOP的前世今生

本文探讨了在开发过程中如何通过AOP(面向切面编程)解决日志分散和核心业务代码混杂的问题,介绍了静态代理和动态代理的区别,重点讲解了如何使用动态代理实现代码解耦并统一管理日志功能。

AOP

1.背景

我们在开发程序时,通常会将日志写在方法里,但是这样会产生两个问题:

1)核心业务代码和日志混合在一起,在开发时会分散精力。

2) 日志分散在各个业务功能方法中,不利于统一维护

2.解决思路

解决这两个问题的核心就是解耦。我们需要把附加功能从业务功能代码中抽取出来。

3.困难

要抽取的代码在方法内部,靠以前抽取重复的代码部分到父类的方式没法解决。所以要引入新的技术,也就是代理模式 。

它的作用是提供一个代理类,让我们在调用目标方法的时候,不是直接调用目标方法,而是通过代理方式间接调用。让不属于目标方法的核心逻辑代码从目标方法中剥离出来,以达到解耦的操作。   

代理模式分为静态代理和动态代理

1)静态代理

这种方式确实是实现了解耦的操作,但是代码都写死了,完全不具备任何的灵活性。将来其他地方也需要附加日志,那还得再声明更多个静态代理类。那就产生了大量重复的代码,日志功能还是分散的,没有统一的管理。

2)动态代理

1.静态代理类是会建立多个的,因为代码都写死了。而动态代理类是只会有一个。不管你是什么类,什么接口,如下图所有,这个逻辑就是在目标方法前、目标方法后都会执行日志操作。

如何做:

1.创建一个动态代理类ProxyFactory,

2.在该类中传入目标对象,使用构造函数的方式赋值

3.定义一个返回代理对象的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值