面向切面编程-AOP的介绍

本文介绍了面向切面编程AOP的概念,强调了其在日志记录和权限校验等横切关注点模块化的优势。AOP的主要编程对象是切面,通过定义通知、目标类、代理类和切入点等概念。文章详细阐述了AOP的两种实现方式——静态代理和动态代理,特别是JDK动态代理和CGLIB动态代理的实现步骤。
摘要由CSDN通过智能技术生成

AOP简介

  1. AOP(Aspect-Oriented Programming,  面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充.。
  2. AOP 的主要编程对象是 切面(aspect), 而切面模块化横切关注点.。
  3. 在应用 AOP 编程时, 仍然需要定义通用的系统功能, 但可以明确的定义这个功能在哪里, 以什么方式应用, 并且不必修改受影响的类. 这样一来横切关注点就被模块化到特殊的对象(切面)里。

 

  AOP的优点:

    •  日志记录的代码和真正的业务逻辑代码进行代码分离 
    •  通用的系统功能(日志记录、权限校验)进行了高度的模块化 
    •  业务逻辑的功能变的更简洁,仅仅包含业务逻辑的代码
    •  AOP可以将系统功能(日志记录)与业务逻辑功能搅和到一起执行

 

 


 

 

 

AOP 中的专业术语

 

  • 切面(aspect):横切逻辑被模块化的特殊对象。即它是一个类 :如LogAspect
  • 通知(advice):切面中必须完成的工作。即它是类中的一个方法:如writeLog()
  • 目标类(target):被通知增强的对象
  • 代理类(proxy):向目标类应用通知增强之后产生的对象
  • 切入点(pointcut):切面中通知执行的“地点”的定义
  • 连接点(JoinPoint): 与切入点匹配的执行点:如目标类中的所有方法getUserId()

 

 


 

 

 

AOP的两种底层实现方式

  代理:

代理设计模式的原理: 使用一个代理对象将原始对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理对象. 代理对象决定是否以及何时将方法调用转到原始对象上。

 

 

 

      •     静态代理:

为每一个目标对象创建一个代理实现类的方式可以认为就是静态代理。

静态代理的实现很简单,但是会造成代理类的快速膨胀,每一个目标类,都需要创建一个代理类

复制代码
 1 //静态代理
 2 public class StaticProxyUserService implements UserService {
 3     //原始对象
 4     private UserService userService;
 5     
 6     public StaticProxyUserService(UserService userService) {
 7         this.userService = userService;
 8     }
 9     @Override
10     public User getById(String userId) {
11         System.out.println("执行权限校验,日志记录.......");
12         return userService.getById(userId);
13     }
14     @Override
15     public boolean add(User user) {
16         System.out.println("执行权限校验,日志记录.......");
17         return userService.add(user);
18     }
19 
20     @Override
21     public boolean delete(String userId) {
22         System.out.println("执行权限校验,日志记录.......");
23         return userService.delete(userId);
24     }
25     @Override
26     public boolean update(User user) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值