org.springframework.aop.framework
Class ProxyConfig

java.lang.Object
  extended byorg.springframework.aop.framework.ProxyConfig
All Implemented Interfaces:
Serializable
Direct Known Subclasses:
AbstractAutoProxyCreator, AdvisedSupport, TransactionProxyFactoryBean

public class ProxyConfig
extends Object
implements Serializable

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

Note that it is no longer possible to configure subclasses to expose the MethodInvocation. Interceptors should normally manage their own ThreadLocals if they need to make resources available to advised objects. If it's absolutely necessary to expose the MethodInvocation, use an interceptor to do so.

Author:
Rod Johnson
See Also:
Serialized Form

Field Summary
protected  boolean exposeProxy
          Should proxies obtained from this configuration expose the AOP proxy for the AopContext class to retrieve for targets?
protected  Log logger
          Transient to optimize serialization: AdvisedSupport resets it.
 
Constructor Summary
ProxyConfig()
           
 
Method Summary
 void copyFrom(ProxyConfig other)
          Copy configuration from the other config object.
 AopProxyFactory getAopProxyFactory()
          Return the AopProxyFactory that this ProxyConfig uses.
 boolean getExposeProxy()
          Deprecated. in favor of isExposeProxy
 boolean getOpaque()
          Deprecated. in favor of isOpaque
 boolean getOptimize()
          Deprecated. in favor of isOptimize
 boolean getProxyTargetClass()
          Deprecated. in favor of isProxyTargetClass
 boolean isExposeProxy()
          Return whether the AOP proxy will expose the AOP proxy for each invocation.
 boolean isFrozen()
          Return whether the config is frozen, and no advice changes can be made.
 boolean isOpaque()
          Return whether proxies created by this configuration should be prevented from being cast to Advised.
 boolean isOptimize()
          Return whether proxies should perform aggressive optimizations.
 boolean isProxyTargetClass()
          Return whether to proxy the target class directly as well as any interfaces.
 void setAopProxyFactory(AopProxyFactory apf)
          Customize the AopProxyFactory, allowing different strategies to be dropped in without changing the core framework.
 void setExposeProxy(boolean exposeProxy)
          Set whether the proxy should be exposed by the AOP framework as a ThreadLocal for retrieval via the AopContext class.
 void setFrozen(boolean frozen)
          Set whether this config should be frozen.
 void setOpaque(boolean opaque)
          Set whether proxies created by this configuration should be prevented from being cast to Advised to query proxy status.
 void setOptimize(boolean optimize)
          Set whether proxies should perform aggressive optimizations.
 void setProxyTargetClass(boolean proxyTargetClass)
          Set whether to proxy the target class directly as well as any interfaces.
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

logger

protected transient Log logger
Transient to optimize serialization: AdvisedSupport resets it.


exposeProxy

protected boolean exposeProxy
Should proxies obtained from this configuration expose the AOP proxy for the AopContext class to retrieve for targets? The default is false, as enabling this property may impair performance.

Constructor Detail

ProxyConfig

public ProxyConfig()
Method Detail

setProxyTargetClass

public void setProxyTargetClass(boolean proxyTargetClass)
Set whether to proxy the target class directly as well as any interfaces. We can set this to true to force CGLIB proxying. Default is false.


isProxyTargetClass

public boolean isProxyTargetClass()
Return whether to proxy the target class directly as well as any interfaces.


getProxyTargetClass

public boolean getProxyTargetClass()
Deprecated. in favor of isProxyTargetClass

See Also:
isProxyTargetClass()

setOptimize

public void setOptimize(boolean optimize)
Set whether proxies should perform aggressive optimizations. The exact meaning of "aggressive optimizations" will differ between proxies, but there is usually some tradeoff.

For example, optimization will usually mean that advice changes won't take effect after a proxy has been created. For this reason, optimization is disabled by default. An optimize value of true may be ignored if other settings preclude optimization: for example, if exposeProxy is set to true and that's not compatible with the optimization.

For example, CGLIB-enhanced proxies may optimize out. overriding methods with no advice chain. This can produce 2.5x performance improvement for methods with no advice.

Warning: Setting this to true can produce large performance gains when using CGLIB (also set proxyTargetClass to true), so it's a good setting for performance-critical proxies. However, enabling this will mean that advice cannot be changed after a proxy has been obtained from this factory.

Parameters:
optimize - whether to enable aggressive optimizations. Default is false.

isOptimize

public boolean isOptimize()
Return whether proxies should perform aggressive optimizations.


getOptimize

public boolean getOptimize()
Deprecated. in favor of isOptimize

See Also:
isOptimize()

setExposeProxy

public void setExposeProxy(boolean exposeProxy)
Set whether the proxy should be exposed by the AOP framework as a ThreadLocal for retrieval via the AopContext class. This is useful if an advised object needs to call another advised method on itself. (If it uses this, the invocation will not be advised).

Default is false, for optimal performance.


isExposeProxy

public boolean isExposeProxy()
Return whether the AOP proxy will expose the AOP proxy for each invocation.


getExposeProxy

public boolean getExposeProxy()
Deprecated. in favor of isExposeProxy

See Also:
isExposeProxy()

setFrozen

public void setFrozen(boolean frozen)
Set whether this config should be frozen.

When a config is frozen, no advice changes can be made. This is useful for optimization, and useful when we don't want callers to be able to manipulate configuration after casting to Advised.


isFrozen

public boolean isFrozen()
Return whether the config is frozen, and no advice changes can be made.


setAopProxyFactory

public void setAopProxyFactory(AopProxyFactory apf)
Customize the AopProxyFactory, allowing different strategies to be dropped in without changing the core framework. Default is DefaultAopProxyFactory, using dynamic proxies or CGLIB.

For example, an AopProxyFactory could return an AopProxy using dynamic proxies, CGLIB or code generation strategy.


getAopProxyFactory

public AopProxyFactory getAopProxyFactory()
Return the AopProxyFactory that this ProxyConfig uses.


setOpaque

public void setOpaque(boolean opaque)
Set whether proxies created by this configuration should be prevented from being cast to Advised to query proxy status. Default is false, meaning that any AOP proxy can be cast to Advised.


isOpaque

public boolean isOpaque()
Return whether proxies created by this configuration should be prevented from being cast to Advised.


getOpaque

public boolean getOpaque()
Deprecated. in favor of isOpaque

See Also:
isOpaque()

copyFrom

public void copyFrom(ProxyConfig other)
Copy configuration from the other config object.

Parameters:
other - object to copy configuration from

toString

public String toString()


Copyright (C) 2003-2004 The Spring Framework Project.