美文网首页
浅析AOP实现原理(1)静态代理

浅析AOP实现原理(1)静态代理

作者: 挡不住的柳Willow | 来源:发表于2017-10-14 17:00 被阅读10次

    什么是AOP

    AOP是OOP的扩展,在OOP中,有许多与核心业务无关的代码如日志代码分布在项目的各个层次中,产生大量的重复代码,并且不利于模块的重用,因此,AOP提供了一种称为切面的技术,剖开对象的内部,将那些影响了多个类的共同行为封装成一个可重用的模块,称为Aspect,也就是切面。这样做的好处就是减少了重复的代码,降低模块之间的耦合。

    在AOP中,最重要的就是AOP代理类的实现,使用了代理模式(不明白代理模式的点这里,分为静态代理动态代理
    静态代理是用AOP框架提供的命令进行编译,从而在编译阶段就可生成AOP代理类;
    动态代理则是在运行时借助JDK动态代理,CGLIB等在内存中临时生成AOP动态代理类。

    静态代理

    假设我们要在杀人之前发出警告,刺杀成功后立刻向组织汇报,用代理模式实现这个过程,然后在代理类中调用杀手的方法前后实现相应的过程

    1、定义一个Killer接口,包含刺杀方法

    public interface Killer {
        void kill();
    }
    

    2、定义杀手实现Killer接口

    public class KillerImpl implements Killer{
        @Override
        public void kill() {
            // TODO Auto-generated method stub
            System.out.println("正在杀人,请勿打扰");
        }
    }
    

    3、定义杀手的代理类,在杀人前和杀人后都发出信息

    public class Proxy implements Killer{
        private Killer killer;
        public Proxy(Killer killer) {
            // TODO Auto-generated constructor stub
            this.killer = killer;
        }
        @Override
        public void kill() {
            // TODO Auto-generated method stub
            System.out.println("我准备杀人啦");
            killer.kill();
            System.out.println("完成任务,今晚吃鸡");
        }
    }
    

    4、测试

    public class Test {
        public static void main(String[] args) {
            KillerImpl killerImpl = new KillerImpl();
            Proxy proxy = new Proxy(killerImpl);
            proxy.kill();
        }
    }
    

    5、输出结果:

    image.png

    相关文章

      网友评论

          本文标题:浅析AOP实现原理(1)静态代理

          本文链接:https://www.haomeiwen.com/subject/ihazyxtx.html