Autofac的AOP面向切面编程研究

什么是AOP:

我的理解是 把系统性的编程工作封装起来 =》我给这个取个名字叫 “Aspect”,然后通过AOP技术把它切进我们的业务逻辑代码 =》 “业务“

这样的好处:

“Aspect” 和 “业务” 相互独立,既可以让“业务” 用到了 “Aspect” 又让2者互相独立不耦合,多个“业务”也能复用 同一份“Aspect”

举一个最实用的例子 Transaction 事物

我们经常会在业务代码上使用Transaction事物,比如使用TransactionScope:

下面的测试代码用到了我在维护的一个开源ORM框架

https://github.com/yuzd/AntData.ORM

示例业务代码:

image

上面的代码 就是 插入一个学校到db 然后拿到主键 赋值给 person 再insert到db。 在同一个事物里面 要么school 和person 同时插入db 要么都失败。

实际业务代码肯定比这个要复杂的多了,比如多个方法在一个事物里面等我这里就举最简单的例子。

那么如果每段业务逻辑都这么写的话 会造成重复性代码很多,下面我们就尝试用AOP面向对切的思想去优化

思考怎样的方式才是我想要的

示例代码:

如上图: 我在需要用到事物的方法上面打了一个 EnableTransactionScope 标签 这样遇到业务方法需要用事物包裹的话 都可以打上这个标签

假如要实现这样的话 得实现以下几点:

我需要代理类,因为只有代理类才能给业务代码做些手脚(织入我们想要的逻辑包裹)

我需要一个DI容器,因为将实例的生成交给DI容器了会很方面的生成代理类

我希望只是打打标签就能实现以上这些,这样可视化最好,也方便

朝着目标去实现它 Just Do It 1. 使用Autofac 这款DI容器 配合 Autofac.Extras.DynamicProxy 库

这2个库都是autofac旗下现成的开源产品,有了这2个库 就满足我上面提到的需求1和需求2

第3点看来得亲自动手了

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppyzd.html