003 代理工厂

Posted 最爱五仁月饼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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同时也提供了配置式的方式.

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

 

以上是关于003 代理工厂的主要内容,如果未能解决你的问题,请参考以下文章

设计模式---003代理模式---凡尘

003-单例OR工厂模式

LEETCODE 003 找出一个字符串中最长的无重复片段

[新增EA003考勤系统演示片段]全程字幕-22套UML+Enterprise Architect建模示范视频

设计模式系列---简单工厂工厂方法抽象工厂

nginx反向代理