zoukankan      html  css  js  c++  java
  • 003 代理工厂

    一. 概述

      之前我们介绍了AOP的实现依赖于动态代理,再深一点说,就是创建出一个代理对象才能完成AOP的实现.

        因此,我们就能知道了,AOP的核心首要就是创建出动态代理对象.


    二 . 前置说明

      AOP在spring之中的表现形式是相当多的,如之前的IOC形式,Aspectj的风格,各种xml的形式,(包括,tx,task等命名空间),如果我们从这里入手学习AOP的话,

        我们会发现内容实在太多了,而且根本找不到入手点.

      在概述之中,我们说到,AOP的一个核心就是创建出动态代理对象,因此我们只要掌握了动态代理对象的生成过程,我们就能知道各种配置方式到底是在做什么东西.


    三 . 代理工厂

      spring为我们提供了一个代理对象的工厂,我们通过这个工厂可以创建出代理对象.

      下面简单的演示一下这个代理工厂的使用.

    public interface Subject {
        
        void  exec();
    }
    public class RealSubject implements Subject{
    
        @Override
        public void exec() {
            System.out.println("real subject");
        }
        
    }
    public class ExecBeforeAdvice implements MethodBeforeAdvice{
    
        @Override
        public void before(Method method, Object[] args, Object target) throws Throwable {
            //几个参数都十分好理解
            /**
             * method : 目标对象的方法
             * args : 方法的参数
             * target : 目标对象
             */
            System.out.println("before");
        }
    
    }

    此处我们使用了前置通知的增强方式.

        public static void main(String[] args) {
            //创建目标对象
            Subject subject = new RealSubject();
            //创建代理工厂
            ProxyFactory factory = new ProxyFactory();
            //设置目标对象
            factory.setTarget(subject);
            //设置通知对象
            factory.addAdvice(new ExecBeforeAdvice());
            //从工厂之中获取代理对象
            Subject proxy = (Subject)factory.getProxy();
            //调用代理对象的方法
            proxy.exec();
        }

    上面是测试代码,我们发现我们生成了一个代理对象.


    四 .总结

      当我们使用jdk动态代理或者cglib的时候,我们的代码量是十分大的.

      但是当我们使用ProxyFactory创建代理对象的时候,过程变得十分简单了.

      注意: 我们使用ProxyFactory创建代理对象的过程是属于编程式的,而spring同时也提供了配置式的方式.

      下一节,我们说一下配置式的使用.

  • 相关阅读:
    [NOI2018]冒泡排序
    四 Synchronized
    三 volatile关键字
    二 原子类
    一 ThreadLocal
    xshell 登录虚拟机ubuntu
    三、kafka主要配置
    二 kafka设计原理
    一. kafka 入门
    Spring boot 学习二:入门
  • 原文地址:https://www.cnblogs.com/trekxu/p/9097241.html
Copyright © 2011-2022 走看看