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

探秘Spring AOP

apollo JAVA开发工程师
难度高级
时长 2小时30分
学习人数
综合评分9.67
84人评价 查看评价
9.9 内容实用
9.4 简洁易懂
9.7 逻辑清晰
  •  强制使用cglib代理。

    查看全部
  • @Before:前置通知

    @After(finally):后置通知,方法执行完之后

    @AfterReturning:返回通知,成功执行之后

    @AfterThrowing:异常通知,抛出异常之后

    @Around:环绕通知


    查看全部
    0 采集 收起 来源:advice注解

    2019-05-13

  • 组成(designator+widlcards+operators)

    表达式

    匹配方法:execution

    匹配注解:@target 、@Args()、@within() 、@annotation()

    匹配包/类型: within()

    匹配对象:this()、target()、bean()

    匹配参数: args()


    查看全部
  • 使用SpringAop的注意事项

    查看全部
    0 采集 收起 来源:课程要点讲述

    2019-04-17

  • 1、引入依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

    2、添加使用@Cacheable注解

    @Cacheable(cacheNames={"menu"})
    public List<String> getMenuList(){
           System.out.println("只有第一次被调用");
           return Arrays.asList("java","C++","PHP");
    }

    https://img1.sycdn.imooc.com//5cb6da8f0001d56a10300539.jpg
    3、调用结果
    https://img1.sycdn.imooc.com//5cb6dab6000177e409610465.jpg

    查看全部
    0 采集 收起 来源:cachable演示

    2019-04-17

  • Spring Security 权限控制:@PreAuthorize("hasRole('ROLE_ADMIN')")

    配置类:

    查看全部
    0 采集 收起 来源:preauthorize演示

    2019-04-17

  • 1、Spring创建Bean流程
    https://img1.sycdn.imooc.com//5cb69d080001b4ed12060599.jpg
    2、强制使用Cglib代理
    https://img1.sycdn.imooc.com//5cb69d410001de5b10380500.jpg
    3、Spring代理使用规则

    查看全部
  • Cglib代理实现MethodInterceptor接口
    https://img1.sycdn.imooc.com//5cb69b3600010e8919201080.jpg

    查看全部
    0 采集 收起 来源:cglib动态代理

    2019-04-17

  • public class JdkProxy implements InvocationHandler {
        Object realObj = null;
        public JdkProxy(Object obj) {
            this.realObj = obj;
        }
        
        // 反射实现动态代理
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("befor");
            Object result = null;
            try {
                result = method.invoke(realObj, args);
            } catch (Exception ex) {
                System.out.println("ex:" + ex.getMessage());
                throw ex;
            } finally {
                System.out.println("after");
            }
            return result;
        }
    }


    查看全部
    0 采集 收起 来源:jdk代理演示

    2019-04-17

  • 1、客户端通过接口引用目标对象或代理对象,这里体现了面向对象的面向接口,客户端调用的目标对象的方法,代理对象都要有,因此目标对象和代理对象共同作为接口的实现类

    2、代理对象把真正的方法委托给目标对象来执行,自己就执行额外的也就是AOP要织入的逻辑,即客户端调用代理的方法,同时给代理类传入目标对象,在代理类里面代理类通过目标对象来调用目标类的方法,在执行方法前后加上代理类的逻辑


    查看全部
    0 采集 收起 来源:代理模式

    2019-04-17

  • 编程范式概览

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

    2019-04-15

  • 5种Advice注解

    查看全部
    0 采集 收起 来源:advice注解

    2019-04-15

  • execution()格式——由前到后含义

    修饰符,返回值,描述包名,描述方法名(描述方法参数),匹配方法抛出的异常

    @Pointcut("execution(public * com.imooc.service..*Service.*(..))")

    截图中 ?表示是可以省略的


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

    2019-04-15

  • 注解匹配...

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

    2019-04-15

  • 匹配参数

    //匹配任何以find开头而且只有一个Long参数的方法
    @Pointcut("execution(* *..find*(Long))")
    public void demo1(){
    
    }
    //匹配任何只有一个Long参数的为Long型的方法
    @Pointcut("args(Long)")
    public void demo2(){
    
    }
    //匹配相关包下参数第一个是Long类型,第二个是String类型的方法
    @Pointcut("args(Long,String) && within(com.pro.service.*)")
    public void demo22(){
    
    }
    //匹配任何以find开头的而且第一个参数为Long型的方法
    @Pointcut("execution(* *..find*(Long,..))")
    public void demo3(){
    
    }
    //匹配第一个参数为Long型的方法
    @Pointcut("args(Long,..)")
    public void demo4(){
    
    }


    查看全部
    0 采集 收起 来源:参数匹配

    2019-04-15

举报

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

微信扫码,参与3人拼团

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

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