Class AdvisedSupport
- All Implemented Interfaces:
Serializable
,Advised
,TargetClassAware
- Direct Known Subclasses:
ProxyCreatorSupport
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.
This class is serializable; subclasses need not be.
This class is used to hold snapshots of proxies.
- Author:
- Rod Johnson, Juergen Hoeller, Sam Brannen
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final TargetSource
Canonical TargetSource when there's no target, and behavior is supplied by the advisors. -
Constructor Summary
ConstructorDescriptionNo-arg constructor for use as a JavaBean.AdvisedSupport
(Class<?>... interfaces) Create anAdvisedSupport
instance with the given parameters. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Cannot add introductions this way unless the advice implements IntroductionInfo.void
Add the given AOP Alliance advice to the tail of the advice (interceptor) chain.void
addAdvisor
(int pos, Advisor advisor) Add an Advisor at the specified position in the chain.void
addAdvisor
(Advisor advisor) Add an advisor at the end of the advisor chain.void
addAdvisors
(Collection<Advisor> advisors) Add all the given advisors to this proxy configuration.void
addAdvisors
(Advisor... advisors) Add all the given advisors to this proxy configuration.void
addInterface
(Class<?> intf) Add a new proxied interface.protected void
Invoked when advice has changed.boolean
adviceIncluded
(Advice advice) Is the given advice included in any advisor within this proxy configuration?protected void
Call this method on a new instance created by the no-arg constructor to create an independent copy of the configuration from the given object.protected void
copyConfigurationFrom
(AdvisedSupport other, TargetSource targetSource, List<Advisor> advisors) Copy the AOP configuration from the givenAdvisedSupport
object, but allow substitution of a freshTargetSource
and a given interceptor chain.int
countAdvicesOfType
(Class<?> adviceClass) Count advices of the given class.Return the advisor chain factory to use (nevernull
).int
Return the number of advisors applying to this proxy.final Advisor[]
Return the advisors applying to this proxy.getInterceptorsAndDynamicInterceptionAdvice
(Method method, Class<?> targetClass) Determine a list ofMethodInterceptor
objects for the given method, based on this configuration.Class<?>[]
Return the interfaces proxied by the AOP proxy.Class<?>
Return the target class behind the implementing object (typically a proxy configuration or an actual proxy).Return theTargetSource
used by thisAdvised
object.int
Return the index (from 0) of the given AOP Alliance Advice, or -1 if no such advice is an advice for this proxy.int
Return the index (from 0) of the given advisor, or -1 if no such advisor applies to this proxy.boolean
isInterfaceProxied
(Class<?> intf) Determine whether the given interface is proxied.boolean
Return whether this proxy configuration is pre-filtered so that it only contains applicable advisors (matching this proxy's target class).boolean
removeAdvice
(Advice advice) Remove the Advisor containing the given advice.void
removeAdvisor
(int index) Remove the advisor at the given index.boolean
removeAdvisor
(Advisor advisor) Remove the given advisor.boolean
removeInterface
(Class<?> intf) Remove a proxied interface.boolean
replaceAdvisor
(Advisor a, Advisor b) Replace the given advisor.void
setAdvisorChainFactory
(AdvisorChainFactory advisorChainFactory) Set the advisor chain factory to use.void
setInterfaces
(Class<?>... interfaces) Set the interfaces to be proxied.void
setPreFiltered
(boolean preFiltered) Set whether this proxy configuration is pre-filtered so that it only contains applicable advisors (matching this proxy's target class).void
Set the given object as target.void
setTargetClass
(Class<?> targetClass) Set a target class to be proxied, indicating that the proxy should be castable to the given class.void
setTargetSource
(TargetSource targetSource) Change theTargetSource
used by thisAdvised
object.AstoString()
will normally be delegated to the target, this returns the equivalent for the AOP proxy.toString()
For debugging/diagnostic use.Methods inherited from class org.springframework.aop.framework.ProxyConfig
copyFrom, isExposeProxy, isFrozen, isOpaque, isOptimize, isProxyTargetClass, setExposeProxy, setFrozen, setOpaque, setOptimize, setProxyTargetClass
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.springframework.aop.framework.Advised
isExposeProxy, isFrozen, isProxyTargetClass, setExposeProxy
-
Field Details
-
EMPTY_TARGET_SOURCE
Canonical TargetSource when there's no target, and behavior is supplied by the advisors.
-
-
Constructor Details
-
AdvisedSupport
public AdvisedSupport()No-arg constructor for use as a JavaBean. -
AdvisedSupport
Create anAdvisedSupport
instance with the given parameters.- Parameters:
interfaces
- the proxied interfaces
-
-
Method Details
-
setTarget
Set the given object as target.Will create a SingletonTargetSource for the object.
-
setTargetSource
Description copied from interface:Advised
- Specified by:
setTargetSource
in interfaceAdvised
- Parameters:
targetSource
- new TargetSource to use
-
getTargetSource
Description copied from interface:Advised
Return theTargetSource
used by thisAdvised
object.- Specified by:
getTargetSource
in interfaceAdvised
-
setTargetClass
Set a target class to be proxied, indicating that the proxy should be castable to the given class.Internally, an
EmptyTargetSource
for the given target class will be used. The kind of proxy needed will be determined on actual creation of the proxy.This is a replacement for setting a "targetSource" or "target", for the case where we want a proxy based on a target class (which can be an interface or a concrete class) without having a fully capable TargetSource available.
-
getTargetClass
Description copied from interface:TargetClassAware
Return the target class behind the implementing object (typically a proxy configuration or an actual proxy).- Specified by:
getTargetClass
in interfaceTargetClassAware
- Returns:
- the target Class, or
null
if not known
-
setPreFiltered
public void setPreFiltered(boolean preFiltered) Description copied from interface:Advised
Set whether this proxy configuration is pre-filtered so that it only contains applicable advisors (matching this proxy's target class).Default is "false". Set this to "true" if the advisors have been pre-filtered already, meaning that the ClassFilter check can be skipped when building the actual advisor chain for proxy invocations.
- Specified by:
setPreFiltered
in interfaceAdvised
- See Also:
-
isPreFiltered
public boolean isPreFiltered()Description copied from interface:Advised
Return whether this proxy configuration is pre-filtered so that it only contains applicable advisors (matching this proxy's target class).- Specified by:
isPreFiltered
in interfaceAdvised
-
setAdvisorChainFactory
Set the advisor chain factory to use.Default is a
DefaultAdvisorChainFactory
. -
getAdvisorChainFactory
Return the advisor chain factory to use (nevernull
). -
setInterfaces
Set the interfaces to be proxied. -
addInterface
Add a new proxied interface.- Parameters:
intf
- the additional interface to proxy
-
removeInterface
Remove a proxied interface.Does nothing if the given interface isn't proxied.
- Parameters:
intf
- the interface to remove from the proxy- Returns:
true
if the interface was removed;false
if the interface was not found and hence could not be removed
-
getProxiedInterfaces
Description copied from interface:Advised
Return the interfaces proxied by the AOP proxy.Will not include the target class, which may also be proxied.
- Specified by:
getProxiedInterfaces
in interfaceAdvised
-
isInterfaceProxied
Description copied from interface:Advised
Determine whether the given interface is proxied.- Specified by:
isInterfaceProxied
in interfaceAdvised
- Parameters:
intf
- the interface to check
-
getAdvisors
Description copied from interface:Advised
Return the advisors applying to this proxy.- Specified by:
getAdvisors
in interfaceAdvised
- Returns:
- a list of Advisors applying to this proxy (never
null
)
-
getAdvisorCount
public int getAdvisorCount()Description copied from interface:Advised
Return the number of advisors applying to this proxy.The default implementation delegates to
getAdvisors().length
.- Specified by:
getAdvisorCount
in interfaceAdvised
-
addAdvisor
Description copied from interface:Advised
Add an advisor at the end of the advisor chain.The Advisor may be an
IntroductionAdvisor
, in which new interfaces will be available when a proxy is next obtained from the relevant factory.- Specified by:
addAdvisor
in interfaceAdvised
- Parameters:
advisor
- the advisor to add to the end of the chain
-
addAdvisor
Description copied from interface:Advised
Add an Advisor at the specified position in the chain.- Specified by:
addAdvisor
in interfaceAdvised
- Parameters:
pos
- position in chain (0 is head). Must be valid.advisor
- the advisor to add at the specified position in the chain- Throws:
AopConfigException
- in case of invalid advice
-
removeAdvisor
Description copied from interface:Advised
Remove the given advisor.- Specified by:
removeAdvisor
in interfaceAdvised
- Parameters:
advisor
- the advisor to remove- Returns:
true
if the advisor was removed;false
if the advisor was not found and hence could not be removed
-
removeAdvisor
Description copied from interface:Advised
Remove the advisor at the given index.- Specified by:
removeAdvisor
in interfaceAdvised
- Parameters:
index
- the index of advisor to remove- Throws:
AopConfigException
- if the index is invalid
-
indexOf
Description copied from interface:Advised
Return the index (from 0) of the given advisor, or -1 if no such advisor applies to this proxy.The return value of this method can be used to index into the advisors array.
-
replaceAdvisor
Description copied from interface:Advised
Replace the given advisor.Note: If the advisor is an
IntroductionAdvisor
and the replacement is not or implements different interfaces, the proxy will need to be re-obtained or the old interfaces won't be supported and the new interface won't be implemented.- Specified by:
replaceAdvisor
in interfaceAdvised
- Parameters:
a
- the advisor to replaceb
- the advisor to replace it with- Returns:
- whether it was replaced. If the advisor wasn't found in the
list of advisors, this method returns
false
and does nothing. - Throws:
AopConfigException
- in case of invalid advice
-
addAdvisors
Add all the given advisors to this proxy configuration.- Parameters:
advisors
- the advisors to register
-
addAdvisors
Add all the given advisors to this proxy configuration.- Parameters:
advisors
- the advisors to register
-
getAdvisorsInternal
Allows uncontrolled access to theList
ofAdvisors
.Use with care, and remember to
fire advice changed events
when making any modifications. -
addAdvice
Description copied from interface:Advised
Add the given AOP Alliance advice to the tail of the advice (interceptor) chain.This will be wrapped in a DefaultPointcutAdvisor with a pointcut that always applies, and returned from the
getAdvisors()
method in this wrapped form.Note that the given advice will apply to all invocations on the proxy, even to the
toString()
method! Use appropriate advice implementations or specify appropriate pointcuts to apply to a narrower set of methods.- Specified by:
addAdvice
in interfaceAdvised
- Parameters:
advice
- the advice to add to the tail of the chain- Throws:
AopConfigException
- in case of invalid advice- See Also:
-
addAdvice
Cannot add introductions this way unless the advice implements IntroductionInfo.- Specified by:
addAdvice
in interfaceAdvised
- Parameters:
pos
- index from 0 (head)advice
- the advice to add at the specified position in the advice chain- Throws:
AopConfigException
- in case of invalid advice
-
removeAdvice
Description copied from interface:Advised
Remove the Advisor containing the given advice.- Specified by:
removeAdvice
in interfaceAdvised
- Parameters:
advice
- the advice to remove- Returns:
true
of the advice was found and removed;false
if there was no such advice- Throws:
AopConfigException
-
indexOf
Description copied from interface:Advised
Return the index (from 0) of the given AOP Alliance Advice, or -1 if no such advice is an advice for this proxy.The return value of this method can be used to index into the advisors array.
-
adviceIncluded
Is the given advice included in any advisor within this proxy configuration?- Parameters:
advice
- the advice to check inclusion of- Returns:
- whether this advice instance is included
-
countAdvicesOfType
Count advices of the given class.- Parameters:
adviceClass
- the advice class to check- Returns:
- the count of the interceptors of this class or subclasses
-
getInterceptorsAndDynamicInterceptionAdvice
public List<Object> getInterceptorsAndDynamicInterceptionAdvice(Method method, @Nullable Class<?> targetClass) Determine a list ofMethodInterceptor
objects for the given method, based on this configuration.- Parameters:
method
- the proxied methodtargetClass
- the target class- Returns:
- a List of MethodInterceptors (may also include InterceptorAndDynamicMethodMatchers)
-
adviceChanged
protected void adviceChanged()Invoked when advice has changed. -
copyConfigurationFrom
Call this method on a new instance created by the no-arg constructor to create an independent copy of the configuration from the given object.- Parameters:
other
- the AdvisedSupport object to copy configuration from
-
copyConfigurationFrom
protected void copyConfigurationFrom(AdvisedSupport other, TargetSource targetSource, List<Advisor> advisors) Copy the AOP configuration from the givenAdvisedSupport
object, but allow substitution of a freshTargetSource
and a given interceptor chain.- Parameters:
other
- theAdvisedSupport
object to take proxy configuration fromtargetSource
- the new TargetSourceadvisors
- the Advisors for the chain
-
toProxyConfigString
Description copied from interface:Advised
AstoString()
will normally be delegated to the target, this returns the equivalent for the AOP proxy.- Specified by:
toProxyConfigString
in interfaceAdvised
- Returns:
- a string description of the proxy configuration
-
toString
For debugging/diagnostic use.- Overrides:
toString
in classProxyConfig
-