java技术--Spring Aop概念

1.AOP的背景

(1)AOP:面向切面的编程技术,JAVA是OOP:面向对象的编程技术
(2)AOP是基于动态代理实现的

2.问题引出:

(1)什么是面向切面的编程技术;
     <1>切面与切点是几何上面的术语
     <2>将核心业务代码过程比作一个柱体
     <3>其他的日志记录,权限校验等就像是横切核心业务的面
     <4>这些面需要完成一些非核心的业务
(2)为什么要面向切面的编程技术;
      <1>在平时的开发中,肯定会遇到下面几个面:1.权限校验;
                                            2.业务的核心代码;
                                            3.记录日志
                                            4.异常/事物的处理
      <2>@Service层采用代码累加的方法,那么结构就会如下:
         @Service
         public class myService{
           @Resource
           private CoreService coreService;
           @Resource
           private LogService logService;
           @Resource
           private PropertyService propertyService;
           // 权限校验代码
           //核心业务层代码
           //记录日志的代码  
           // 异常/事物的处理
           }
      <3>上面的代码结构中可以看出以下几个问题:
         1.代码混乱:核心业务模块与其他非核心的代码交织在一起,不利于代码的维护
         2.冗余代码:权限的校验,异常的处理,日志的记录可以独立在一个模块给所有的服务公用,写在一起导致代码的分散和冗余
      <4>因此面向切面的编程技术应运而生!!
(3)与OOP是什么关系
      <1>AOP的实现技术有多种,其中与Java无缝对接的是一种称为AspectJ的技术
      <2>Spring AOP 与AspectJ 实现原理上并不完全一致,但功能上是相似的
      <3>AOP的出现解决外围业务代码与核心业务代码分离的问题,但它并不会替代OOP
      <4>OOP的出现是把编码问题进行模块化,AOP就是把涉及到众多模块的某一类问题进行统一管理

3.AOP的核心概念

(1)切面(Aspect):是一个类,里面定义了通知与切点,Spring提供了四种aop切面的支持
      <1>基于代理的经典的pringAop
      <2>纯POJO切面
      <3>@AspectJ注解驱动切面(底层也是Spring的动态代理 只是参考了AspectJ的一些形式)
      <4>注入式Aspectj切面
(2)切点(PointCut):表达式。就是告诉程序要在执行哪些核心业务的时候,执行非核心的业务
(3)通知(advice):五种通知方式:
     <1>@Before:前置通知,在调用目标方法之前执行通知定义的任务
     <2>@After:后置通知,在目标方法执行结束后,无论执行结果如何都执行通知定义的任务
     <3>@After-returning:后置通知,在目标方法执行结束后,如果执行成功,则执行通知定义的任务
     <4>@After-throwing:异常通知,如果目标方法执行过程中抛出异常,则执行通知定义的任务
     <5>@Around:环绕通知,在目标方法执行前和执行后,都需要执行通知定义的任务

4.切点表达式
(1)这个表达式有很多种,如方法签名表达式,类型签名表达式,还有其他的表达式
<1>方法签名表达式:
1.关键字:execution
2.execution (com.atguigu.spring.MyBean.*(…)):该通知将匹配MyBean中的所有方法
<2>类型签名表达式:
1.关键字:within
2.within(net.yangki.spring.demo.MyService): 该通知将匹配MyService类中的所有方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值