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 代理工厂的主要内容,如果未能解决你的问题,请参考以下文章