请选择 进入手机版 | 继续访问电脑版

沙漏笔记

 找回密码
 立即注册

Aop面向切面编程详解:什么是面向切面编程

[复制链接]
发表于 2018-8-24 15:56:27 |显示全部楼层
在系统开发过程中 我们经常会碰到这种情况。有可能在系统最开始的时候没有加入日志审计功能。可是后期又需要在这个系统中

加入,那我们是不是应该在每一个Controller中加入日志审计呢。当然不是 这个时候 面向切面编程就派上用场了。

为什么会有面向切面编程(AOP)?我们知道Java是一个面向对象(OOP)的语言,但它有一些弊端,比如当我们需要

为多个不具有继承关系的对象引入一个公共行为,例如日志,权限验证,事务等功能时,只能在在每个对象里引用公

共行为,这样做不便于维护,而且有大量重复代码。AOP的出现弥补了OOP的这点不足.


比如上面的鉴权的例子,假设我要给UserController的saveUser()方法加入鉴权,

第一种方式,我可以采用代理模式

什么是代理模式,就是我再生成一个代理类,去代理UserController的saveUser()方法,代码大概就长这样

class UserControllerProxy {

      private UserController userController;   
      public void saveUser() {

                checkAuth();

                 userController.saveUser();

     }
}

这样 在调用这个代理类的saveUser方法的时候就能将权限管理加入进来。

代理分为静态代理动态代理,静态代理,顾名思义,就是你自己写代理对象,动态代理,则是在运行期,生成一个代理对象




依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念

参考资料:https://www.zhihu.com/question/24863332


您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|沙漏笔记

GMT+8, 2019-5-22 09:33 , Processed in 0.111329 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Copyright © 2015-2018 xuejava网 / 鲁ICP备17054568号-1
回顶部