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

探秘Spring AOP

apollo JAVA开发工程师
难度高级
时长 2小时30分
学习人数
综合评分9.67
84人评价 查看评价
9.9 内容实用
9.4 简洁易懂
9.7 逻辑清晰
  • AOP面向切面编程

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

    2020-01-07

  • 责任链模式

    查看全部
  • Spring 创建 AOP 代理类时序图

    查看全部
  • 代理模式。

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

    2020-01-02

  • AOP代理

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

    2019-11-03

  • package com.imooc.chain;
    Chain与ChainHandler之间的函数回调设计,遍历Chain中的ChainHandler执行相关方法/**
     * Created by cat on 2017-02-28.
     */
    public abstract class ChainHandler {

        public void execute(Chain chain){
            handleProcess();
            chain.proceed();
        }

        protected abstract void handleProcess();
    }
    package com.imooc.chain;

    import java.util.List;

    /**
     * Created by cat on 2017-02-28.
     */
    public class Chain {

        private List<ChainHandler> handlers;

        private int index = 0;

        public Chain(List<ChainHandler> handlers) {
            this.handlers = handlers;
        }

        public void proceed(){
            if(index >= handlers.size()){
                return ;
            }
            handlers.get(index++).execute(this);
        }
    }

    /**
     * Created by cat on 2017-02-28.
     */
    public class ChainClient {
        static class ChainHandlerA extends ChainHandler{
            @Override
            protected void handleProcess() {
                System.out.println("handle by chain a");
            }
        }
        static class ChainHandlerB extends ChainHandler{
            @Override
            protected void handleProcess() {
                System.out.println("handle by chain b");
            }
        }
        static class ChainHandlerC extends ChainHandler{
            @Override
            protected void handleProcess() {
                System.out.println("handle by chain c");
            }
        }

        public static void main(String[] args){
            List<ChainHandler> handlers = Arrays.asList(
                    new ChainHandlerA(),
                    new ChainHandlerB(),
                    new ChainHandlerC()
            );
            Chain chain = new Chain(handlers);
            chain.proceed();
        }
    }

    查看全部
  • 责任链的调用

    /**
     * Created by cat on 2017-02-28.
     */
    public abstract class Handler {

        private Handler sucessor;

        public Handler getSucessor() {
            return sucessor;
        }

        public void setSucessor(Handler sucessor) {
            this.sucessor = sucessor;
        }

        public void execute(){
            handleProcess();
            if(sucessor != null){
                sucessor.execute();
            }
        }

        protected abstract void handleProcess();
    }
    package com.imooc.chain;

    /**
     * Created by cat on 2017-02-28.
     */
    public class Client {
        static class HandlerA extends Handler{
            @Override
            protected void handleProcess() {
                System.out.println("handle by a");
            }
        }
        static class HandlerB extends Handler{
            @Override
            protected void handleProcess() {
                System.out.println("handle by b");
            }
        }
        static class HandlerC extends Handler{
            @Override
            protected void handleProcess() {
                System.out.println("handle by c");
            }
        }

        public static void main(String[] args){
            Handler handlerA = new HandlerA();
            Handler handlerB = new HandlerB();
            Handler handlerC = new HandlerC();

            handlerA.setSucessor(handlerB);
            handlerB.setSucessor(handlerC);

            handlerA.execute();
        }
    }

    查看全部
  • 责任链模式

    查看全部
  • 强制使用Cglib代理
    查看全部
  • springAOP的代理分情况使用jdk或者cglib的动态代理。
    查看全部
  • Spring如何选择使用jdk代理还是cglib代理?

    1、如果目标对象实现了接口,默认使用JDK代理

    2、如果目标对象没有实现接口,默认使用cglib代理

    3、如果目标对象实现了接口,但我们可以强制使用cglib代理,方法如下:

    @SpringBootApplication @EnableAspectJAutoProxy(proxyTargetClass = true)

    查看全部
  • Spring 如何代理

    查看全部
  • JDK与Cglib代理对比: 1:JDK只能针对有接口的类的接口方法进行动态代理; 2:Cglib基于继承来实现代理,无法对static、final类进行代理; 3:Cglib基于继承来实现代理,无法对private、static方法进行代理。

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

    2019-10-22

  • public class Client {<br/><br/>&nbsp;&nbsp;&nbsp; public static void main(String[] args){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enhancer enhancer = new Enhancer();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enhancer.setSuperclass(RealSubject.class);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enhancer.setCallback(new DemoMethodInterceptor());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subject subject = (Subject) enhancer.create();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subject.hello();<br/>&nbsp;&nbsp;&nbsp; }<br/>}
    查看全部
    0 采集 收起 来源:cglib动态代理

    2020-09-11

  • public class DemoMethodInterceptor implements MethodInterceptor{
        @Override
        public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
            System.out.println("before in cglib");
            Object result = null;
            try{
                result = proxy.invokeSuper(obj, args);
            }catch (Exception e){
                System.out.println("get ex:"+e.getMessage());
                throw e;
            }finally {
                System.out.println("after in cglib");
            }
            return result;
        }
    }

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

    2019-10-22

举报

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

微信扫码,参与3人拼团

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

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