为了账号安全,请及时绑定邮箱和手机立即绑定

探秘Spring AOP

apollo JAVA开发工程师
难度高级
时长 2小时30分
学习人数
综合评分9.67
84人评价 查看评价
9.9 内容实用
9.4 简洁易懂
9.7 逻辑清晰
  • 1.为什么要引入AOP的编程范式

    引入AOP的编程范式去处理那些OOP不能处理的问题或不好处理的问题,例如视频中老师说的权限控制问题。又比如一个方法中要插入数据到两张表中时,这一次操作是同一个事务,要么同时失败,要么同时成功,这时是不能用面向对象(OOP)编程去实现的。

    2.AOP的好处以及适用场景是什么?

    能够减少大量的重复代码,视频中所言;又如事务控制时,我们只需要在方法上加@transaction就可以在该方法上启用事务机制,如果发生异常,那么事务会进行自动回滚。这样,我们开发人员能够更加的关注业务代码的开发,而不是事务代码的编写。

    3.AOP的两大核心是什么?

    AOP的两大核心就是分离软件系统功能性需求(核心关注点)和非功能性需求(非核心关注点),业务处理的主要流程将集中在核心关注点处。


    查看全部
    4 采集 收起 来源:本章小结

    2018-12-04

  • AOP的核心特点

    1,解决代码重复;

    2,关注点转移(分离)

    关注点有水平分离、垂直分离以及功能分离(AOP)

    水平分离:一般的持久层->服务层->展示层

    垂直分离:业务模块的分离->订单系统、支付系统等

    功能分离:将非功能部分,分离(转移)到功能部分进行管理


    查看全部
    3 采集 收起 来源:本章小结

    2018-03-28

  • jdk运行期动态代理源码解析:其实就是真实类实现一个接口,我们再写一个类似于切面的类,实现invocationhandler接口且实现invoke方法,同时要保存真实类对象,初始化时赋值对象,invoke方法中反射方式调用真是对象方法,在方法前后可以加上定制的逻辑,这个方法其实是动态代理对象调用的,动态代理对象是客户端通过动态代理类实例化的,而动态代理类是真实对象方法执行前的运行期生成的.class类,这个类实现了和真实对象一样的接口,所以也有真实对象的方法,调用代理对象方法时也就可以传入参数,然后代理对象再将方法和参数传递给invocationhandler的实例对象。
    查看全部
  • 主要几个注解

    @Aspect说明这个类是切面配置的类(这个类由@Pointcut切面表达式和Advice两部分组成)

    @Pointcut表示在哪些类中哪些方法植入代码

    Advice(5种)表示植入时机

    查看全部
  • Pointcut匹配对象

    @Pointcut("this()"),实现类,代理对象;

    @Pointcut("target()"),所有实现他的类

    @Pointcut("bean()")   过滤spring托管的bean的实例,通过bean的名称进行过滤

    查看全部
    2 采集 收起 来源:对象匹配

    2018-08-02

  • AOP注解注解实现:

     @Aspect:切面 = 切点+通知(手动添加的代码,一般是方法); @Point:切点,横切关注点; 

    @Before(前置通知):添加的内容在切点之前执行;

    @After(后置通知): 添加的内容在切点之后执行

    还有环绕通知,异常通知,返回通知

     ------------------------------------ 

    @Autowired:自动装配,与Spring注入相关,可按类型、名装配; Spring注解@Component、@Controller、@Service、@Repository;

    传统方式的缺点:这种方式属于硬编码,对引入者代码是有侵入的。如果对删除或增加产品还有其它关联操作,添加代码时会增加代码复杂度。而AOP会将校验分离出来变成无侵入


    查看全部
    2 采集 收起 来源:代码演示

    2018-08-02

  • Pointcut :切面表达式 designators:指示器,描述通过什么方式去匹配Java的那些方法 execution():匹配方法 匹配注解 @target() @args() @within() @annotation() within():匹配包/类型 this()/bean()/target():匹配对象 args():匹配参数 wildcards:通配符(*:匹配任意数量的字符;+匹配指定类及其子类;..:一般用于匹配任意数的子包或参数) operators: 运算符(&&:与操作符;||或;!:非)
    查看全部
  • 静态代理就是一个代理类根据被代理类的情况,被代理类有几个方法,代理类就需要有几个方法,每个方法都要对被代理类进行代理,这样会出现代码重复的情况,如多个被代理方法其实前后需要执行的逻辑是一样的,但是静态代理还是需要为每个方法写一个代理方法,造成代码重复。动态代理根据放射得到被代理类执行的方法和参数,避免了代码的重复。
    查看全部
    2 采集 收起 来源:jdk代理演示

    2017-11-01

  • 这一页内容比较多。 无法对final类进行代理,因为final类不能被继承 关于Cglib无法对static类和方法进行代理: 单一的类是没有static修饰符的,只有静态类内部可以用static修饰; 对于static方法,它是属于类的,子类在不重写的情况下,是可以调用的,但是一旦重写了就无法调用了,普通的public方法可以通过super.method()调用,但是static方法不行
    查看全部
    2 采集 收起 来源:cglib动态代理

    2017-09-28

  • 1.解决代码重复性问题 2.关注点分离 水平分离: 垂直分离:业务角度 切面分离:非功能性需求从功能性需求中剥离出来,集中管理。
    查看全部
    2 采集 收起 来源:面向切面编程

    2017-08-31

  • Spring AOP


    编程范式种类概览

    1、面向过程编程

    2、面向对象编程

    3、函数式编程

    4、事件驱动编程

    5、面向切面编程


    AOP

    是一种对 面向对象编程 的补充,用来解决特定问题的编程范式,并不是适合所有场景。

    初衷:

    do not repeat yourself,减少重复代码

    separate of concern,关注分离

    水平分离,展示层->服务层->持久层

    垂直分离,模块划分(订单,库存)

    切面分离,把 功能性需求 与 非功能性需求 分开

    好处:

    集中处理某一关注点/横切逻辑

    很方便地添加/删除关注点

    侵入性少,增强代码可读性和可维护性

    (我们把一些功能的共同性抽取出来,通过一个AOP拦截注入,需要的地方加一个注解即可,不需要之后把注解去掉即可,这些共同功能只需要在一个拦截器维护即可,减少代码,侵入性低,维护很方便,比如存在有一些job调度任务只能单点允许,但是服务是多台部署,就需要解决锁竞争,获取锁的单点即可执行调度,就可以把锁竞争分离出来,放入拦截器中,需要调度的地方加入注解即可)


    适用场景:

    权限控制 如shiro就是方便通个注解注入,然后拦截

    缓存控制

    审计日志 如统一打接口参数日志,不用在每个接口处记录

    事物控制  spring的@Transaction

    性能监控  

    异常处理  接口统一异常拦截返回

    分布式追踪


    查看全部
    1 采集 收起 来源:面向切面编程

    2020-07-04

  • 第三步:

    /**
     * //匹配任何公共方法
     @Pointcut("execution(public * com.imooc.service.*.*(..))")

     //匹配com.imooc包及子包下Service类中无参方法
     @Pointcut("execution(* com.imooc..*Service.*())")

     //匹配com.imooc包及子包下Service类中的任何只有一个参数的方法
     @Pointcut("execution(* com.imooc..*Service.*(*))")

     //匹配com.imooc包及子包下任何类的任何方法
     @Pointcut("execution(* com.imooc..*.*(..))")

     //匹配com.imooc包及子包下返回值为String的任何方法
     @Pointcut("execution(String com.imooc..*.*(..))")

     //匹配异常
     execution(public * com.imooc.service.*.*(..) throws java.lang.IllegalAccessException)

     * Created by cat on 2017-02-19.
     */
    @Aspect
    @Component
    public class ExecutionAspectConfig {

     @Pointcut("execution(public * com.imooc.service..*Service.*(..) throws java.lang.IllegalAccessException)")
     public void matchCondition(){}

     @Before("matchCondition()")//before代表要执行插入的逻辑
     public void before(){
      System.out.println("");
      System.out.println("###before");
     }

    }

    查看全部
    1 采集 收起 来源:execution表达式

    2019-10-22

  • 1.为了解决oop面向对象的不足

    2.(1)降低模块之间的耦合

       (2)实现代码的复用

       (3)使程序更容易扩展

        场景:日志记录,性能统计,安全控制,事务处理,异常处理

    3.使用动态代理和使用静态织入

    查看全部
    2 采集 收起 来源:本章小结

    2019-03-07

  • aop注解方式

    查看全部
  • 匹配注解

    //匹配方法标注有AdminOnly的注解的方法

    @Pointcut("@annotation(com.imooc.demo.security.AdminOnly)")

    public void annoDemo(){}


    //匹配标注有Beta的类底下的方法,要求的annotation的RetentionPolicy级别为CLASS

    @Pointcut("@within(com.google.common.annotations.Beta)")

    public void annoWithinDemo(){}


    //匹配标注有Repository的类底下的方法,要求的annotation的RetentionPolicy级别为RUNTIME

    @Pointcut("@target(org.springframework.stereotype.Repository)")

    public void annoTargetDemo(){}


    //匹配传入的参数类标注有Repository注解的方法

    @Pointcut("@args(org.springframework.stereotype.Repository)")

    public void annoArgsDemo(){}

    查看全部
    1 采集 收起 来源:注解匹配

    2018-12-13

首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
本课程有一定的难度,需要同学较为熟练的掌握Spring和Spring Boot相关知识。熟练配置mysql,mongodb和maven项目。本课程将带领大家对源码进行刨析!不熟悉相关内容的同学可先学习SSM免费路径上的课程和慕课网上Spring Boot的基础课(http://www.imooc.com/learn/767)。
老师告诉你能学到什么?
让学生了解SpringAop的原理,使用,解读SpirngAop的经典代码,再通过案例加深让学生对SpirngAop的理解和掌握的程度

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!