Spring中的ProxyFactoryBean

ProxyFactoryBean的作用是产生proxy

 

Spring ProxyFactoryBean的层次结构:

 

ProxyFactoryBean的声明如下:

public class ProxyFactoryBean extends AdvisedSupport

    implements FactoryBean, BeanFactoryAware, AdvisedSupportListener {

            ……

            private String[] interceptorNames;

           

            private boolean singleton = true;

 

            private boolean freezeProxy = false;

 

            private String targetName;

 

public void setProxyInterfaces(String[] interfaceNames) throws  ClassNotFoundException {}

……

}

 

AdvisedSupport的声明如下:

 public class AdvisedSupport extends ProxyConfig implements Advised {

            ……

            private transient List listeners = new LinkedList();

 

            private List advisors = new LinkedList();

           

            private Advisor[] advisorArray = new Advisor[0];

 

            private List interfaces = new ArrayList();

 

            private transient boolean isActive;

 

public void setTargetSource(TargetSource targetSource) {}

……

}

 

public class ProxyConfig implements Serializable {

……

            private boolean proxyTargetClass = false;

           

            private boolean optimize = false;

           

            private boolean opaque = false;

 

            protected boolean exposeProxy = false;

 

            private boolean frozen = false;

……

}

ProxyFactoryBean 是提供给用户使用的创建proxy对象的类。所以它的特征是客户化:配置一些名词性的东西,如上述代码中写到的,interceptorNamessingletonfreezeProxytargetNameproxyInterfaces等等。

 

ProxyFactoryBean 继承的class和实现的主要interafce 功能分别如下:

 

FactoryBean  interface是为了创建 proxy对象;

 

AdvisedSupport 提供了对AdviceAdvised的良好管理和支持。注意它implementinterface Advised。它的管理是针对对象的管理。它并不是直接提供给用户使用的。如上述代码中写到的,targetSourceadvisorslisteners等。跟ProxyFactoryBean进行比较会发现,对于AdvisedSupport管理的targetSourceProxyFactoryBean管理的相应的是targetName。注意体会和理解为什么会这样。在这需要说明的是,用户配置时,是可以直接配targetSource而不用配targetName的,但这两者其实不尽相同的。关于这点,可能需要专门的阐述一下,主要是

SingletonPrototype的区别的问题。如果读者不熟悉SingletonPrototype design pattern,可以先参阅相关的design pattern的文章。

These are not themselves AOP proxies, but subclasses of this class are  normally factories from which AOP proxy instances are obtained directly.

This class frees subclasses of the housekeeping of Advices  and Advisors, but doesn't actually implement proxy creation  methods, which are provided by subclasses.

 

ProxyConfig 通用代理配置信息提供类。如是否直接代理class而不是interfaceproxyTargetClass property),是否需要优化如果存在可优化的情况下(optimize property)。

Convenience super class for configuration used in creating proxies, to ensure that all proxy creators have consistent properties.

 

从上面的分析可以看出,ProxyFactoryBean借助了AdvisedSupport来管理其Advisor/Advice以及target source,借助ProxyConfig来管理其proxy相关的通用属性,借助FactoryBean  来约束创建proxy的规范,通过这几者的有机结合,就可以创建proxy对象了。由此可见,Spring里的class的职责分配还是是相当的明确、独立、精练的。这个在Spring里其实地方还有很多很多的体现。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值