• Spring_详解AOP


    基本的概念

    切面:Aspect

          在程序中就是一个类,该类中定义的方法就是要增强的功能。

    连接点:JoinPoint

          切面中的每一个增强方法都是一个连接点

    切入点:PointCut

          对哪个目标对象的哪些方法进行增强

    目标对象:target

          要被增强的对象【原对象】

    代理对象:proxy

          增强后的对象【代理对象与目标对象数据类型相同】

    织入:wave

          将切面对目标对象进行增强

    Spring如何写一个切面类?

          Advice:通知

          Advisor:顾问

    Spring的AOP编程步骤

    1. 通知实现aop编程

    2. 添加jar包,aop、aopalliance-1.0

    3. 写目标类和目标方法(比如:UserServiceImpl的remove和list方法)

    4. 写切面中的通知类

    5. 通知分类:

      前置通知:MethodBeforeAdvice

      后置通知:AfterReturningAdvice

      环绕通知:MethodInterceptor

      异常通知:ThrowsAdvice

    本次需求:对UserServiceImpl的目标对象进行增强,在方法执行前进行权限校验

    6. 配置spring的配置文件

    7. 其他通知类型的案例:

    创建切面类,实现对应的通知类型的接口

    重写方法,定义要增强的功能

    在spring的配置文件中创建切面类的对象

    在spring中织入切面

     

    总结

    通知的方式只能确定要增强的时间点【前置、后置…】

    通知的方式会将目标对象的所有的方法全部进行增强

    通知的方式如果要为多个目标对象进行增强,需要配置多次代理工厂

    顾问实现aop编程

    顾问主要解决的问题:可以通过配置实现让哪些目标对象的哪些方法进行哪些增强。

    从方法名入手

    spring提供了两种方式:

        org.springframework.aop.support.NameMatchMethodPointcutAdvisor

             org.springframework.aop.support.RegexpMethodPointcutAdvisor

    顾问的开发

    NameMatchMethodPointcutAdvisor

    在通知的基础上新建一个顾问对象

    如果希望多目标对象的多个方法进行增强

    还可以用*来匹配方法名

    RegexpMethodPointcutAdvisor

     

    总结:

      解决个单个目标对象的多个目标方法增强同一方法的问题

      还需解决多个目标对象要增强需要配置多个代理工厂对象

      还需解决一个顾问不能为一个目标方法进行多种增强

    spring中的自动代理

    前面使用的代理工厂对象ProxyFactoryBean来创建代理对象,该对象一次只能创建一个需要的目标对象的代理对象,spring中还有可以自动生成代理对象的api

    spring中代理对象的方式1:ProxyFactoryBean

          一次只能创建一个代理对象

    spring中代理对象的方式2:BeanNameAutoProxyCreator

      org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator

    用BeanNameAutoProxyCreator替换ProxyFactoryBean,实现了一个配置可以生成多个目标对象的代理对象,并且为代理对象取的bean的id值为目标对象的bean的id的值。

    如果有很多个目标对象,配置beanNames用逗号隔开

    或者

    spring中代理对象的方式3:DefaultAdvisorAutoProxyCreator

    全自动代理

      org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator

    spring而言,aop(面向切面编程)最好的方式:

          通知(四种)+顾问(两种)+ BeanNameAutoProxyCreator自动代理(三种)

    回顾的博客:https://www.cnblogs.com/whgk/p/6627187.html

    如果有了aspectj的jar包,spirng-aop可以简化

    1、        写目标类

    2、        写通知切面类

    3、        配置spring配置文件

    学习中,博客都是自己学习用的笔记,持续更新改正。。。
  • 相关阅读:
    apache性能测试工具
    redis和memcacahe、mongoDB的区别
    redis 安装
    redis介绍
    svn基本命令
    变量
    redis持久化有几种.如何配置
    Sundy_Android开发深入浅出和高级开发视频教程
    VC++ MFC类库基础(55讲全)
    从C++起步到MFC实战VC++软件工程师高端培训 视频保存在 播音员的网盘中
  • 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11784871.html
Copyright © 2020-2023  润新知