java.lang.Object | ||||
↳ | org.springframework.aop.framework.ProxyConfig | |||
↳ | org.springframework.aop.framework.AdvisedSupport | |||
↳ | org.springframework.aop.framework.ProxyCreatorSupport | |||
↳ | org.springframework.aop.framework.ProxyFactoryBean |
FactoryBean
implementation that builds an
AOP proxy based on beans in Spring BeanFactory
.
org.aopalliance.intercept.MethodInterceptor MethodInterceptors and
Advisors
are identified by a list of bean
names in the current bean factory, specified through the "interceptorNames" property.
The last entry in the list can be the name of a target bean or a
TargetSource
; however, it is normally preferable
to use the "targetName"/"target"/"targetSource" properties instead.
Global interceptors and advisors can be added at the factory level. The specified
ones are expanded in an interceptor list where an "xxx*" entry is included in the
list, matching the given prefix with the bean names (e.g. "global*" would match
both "globalBean1" and "globalBean2", "*" all defined interceptors). The matching
interceptors get applied according to their returned order value, if they implement
the Ordered
interface.
Creates a JDK proxy when proxy interfaces are given, and a CGLIB proxy for the actual target class if not. Note that the latter will only work if the target class does not have final methods, as a dynamic subclass will be created at runtime.
It's possible to cast a proxy obtained from this factory to Advised
,
or to obtain the ProxyFactoryBean reference and programmatically manipulate it.
This won't work for existing prototype references, which are independent. However,
it will work for prototypes subsequently obtained from the factory. Changes to
interception will work immediately on singletons (including existing references).
However, to change interfaces or target it's necessary to obtain a new instance
from the factory. This means that singleton instances obtained from the factory
do not have the same object identity. However, they do have the same interceptors
and target, and changing any reference will change all objects.
setInterceptorNames(String[])
setProxyInterfaces(Class[])
Advisor
Advised
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
String | GLOBAL_SUFFIX | This suffix in a value in an interceptor list indicates to expand globals. |
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
logger |
[Expand]
Inherited Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
org.springframework.aop.framework.AdvisedSupport
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Return a proxy.
| |||||||||||
Return the type of the proxy.
| |||||||||||
Is the object managed by this factory a singleton? That is,
will
getObject() always return the same object
(a reference that can be cached)?
NOTE: If a FactoryBean indicates to hold a singleton object,
the object returned from | |||||||||||
Specify the AdvisorAdapterRegistry to use.
| |||||||||||
Set whether to autodetect proxy interfaces if none specified.
| |||||||||||
Callback that supplies the bean
class loader to
a bean instance. | |||||||||||
Callback that supplies the owning factory to a bean instance.
| |||||||||||
Set whether this config should be frozen.
| |||||||||||
Set the list of Advice/Advisor bean names.
| |||||||||||
Set the ClassLoader to generate the proxy class in.
| |||||||||||
Set the names of the interfaces we're proxying.
| |||||||||||
Set the value of the singleton property.
| |||||||||||
Set the name of the target bean.
|
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Blow away and recache singleton on an advice change.
| |||||||||||
Create a composite interface Class for the given interfaces,
implementing the given interfaces in one single Class.
| |||||||||||
Return the proxy object to expose.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
org.springframework.aop.framework.ProxyCreatorSupport
| |||||||||||
From class
org.springframework.aop.framework.AdvisedSupport
| |||||||||||
From class
org.springframework.aop.framework.ProxyConfig
| |||||||||||
From class
java.lang.Object
| |||||||||||
From interface
org.springframework.aop.TargetClassAware
| |||||||||||
From interface
org.springframework.aop.framework.Advised
| |||||||||||
From interface
org.springframework.beans.factory.BeanClassLoaderAware
| |||||||||||
From interface
org.springframework.beans.factory.BeanFactoryAware
| |||||||||||
From interface
org.springframework.beans.factory.FactoryBean
|
This suffix in a value in an interceptor list indicates to expand globals.
Return a proxy. Invoked when clients obtain beans from this factory bean.
Create an instance of the AOP proxy to be returned by this factory.
The instance will be cached for a singleton, and create on each call to
getObject()
for a proxy.
BeansException |
---|
Return the type of the proxy. Will check the singleton instance if already created, else fall back to the proxy interface (in case of just a single one), the target bean type, or the TargetSource's target class.
null
if not known at the time of the callIs the object managed by this factory a singleton? That is,
will getObject()
always return the same object
(a reference that can be cached)?
NOTE: If a FactoryBean indicates to hold a singleton object,
the object returned from getObject()
might get cached
by the owning BeanFactory. Hence, do not return true
unless the FactoryBean always exposes the same reference.
The singleton status of the FactoryBean itself will generally be provided by the owning BeanFactory; usually, it has to be defined as singleton there.
NOTE: This method returning false
does not
necessarily indicate that returned objects are independent instances.
An implementation of the extended SmartFactoryBean
interface
may explicitly indicate independent instances through its
isPrototype()
method. Plain FactoryBean
implementations which do not implement this extended interface are
simply assumed to always return independent instances if the
isSingleton()
implementation returns false
.
Specify the AdvisorAdapterRegistry to use. Default is the global AdvisorAdapterRegistry.
Set whether to autodetect proxy interfaces if none specified.
Default is "true". Turn this flag off to create a CGLIB proxy for the full target class if no interfaces specified.
Callback that supplies the bean class loader
to
a bean instance.
Invoked after the population of normal bean properties but
before an initialization callback such as
InitializingBean's
afterPropertiesSet()
method or a custom init-method.
classLoader | the owning class loader; may be null in
which case a default ClassLoader must be used, for example
the ClassLoader obtained via
getDefaultClassLoader()
|
---|
Callback that supplies the owning factory to a bean instance.
Invoked after the population of normal bean properties
but before an initialization callback such as
afterPropertiesSet()
or a custom init-method.
beanFactory | owning BeanFactory (never null ).
The bean can immediately call methods on the factory. |
---|
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.
Set the list of Advice/Advisor bean names. This must always be set to use this factory bean in a bean factory.
The referenced beans should be of type Interceptor, Advisor or Advice The last entry in the list can be the name of any bean in the factory. If it's neither an Advice nor an Advisor, a new SingletonTargetSource is added to wrap it. Such a target bean cannot be used if the "target" or "targetSource" or "targetName" property is set, in which case the "interceptorNames" array must contain only Advice/Advisor bean names.
NOTE: Specifying a target bean as final name in the "interceptorNames"
list is deprecated and will be removed in a future Spring version.
Use the "targetName"
property instead.
Advisor
SingletonTargetSource
Set the ClassLoader to generate the proxy class in.
Default is the bean ClassLoader, i.e. the ClassLoader used by the containing BeanFactory for loading all bean classes. This can be overridden here for specific proxies.
Set the names of the interfaces we're proxying. If no interface is given, a CGLIB for the actual class will be created.
This is essentially equivalent to the "setInterfaces" method, but mirrors TransactionProxyFactoryBean's "setProxyInterfaces".
ClassNotFoundException |
---|
Set the value of the singleton property. Governs whether this factory should always return the same proxy instance (which implies the same target) or whether it should return a new prototype instance, which implies that the target and interceptors may be new instances also, if they are obtained from prototype bean definitions. This allows for fine control of independence/uniqueness in the object graph.
Set the name of the target bean. This is an alternative to specifying the target name at the end of the "interceptorNames" array.
You can also specify a target object or a TargetSource object directly, via the "target"/"targetSource" property, respectively.
Blow away and recache singleton on an advice change.
Create a composite interface Class for the given interfaces, implementing the given interfaces in one single Class.
The default implementation builds a JDK proxy class for the given interfaces.
interfaces | the interfaces to merge |
---|
Return the proxy object to expose.
The default implementation uses a getProxy
call with
the factory's bean class loader. Can be overridden to specify a
custom class loader.
aopProxy | the prepared AopProxy instance to get the proxy from |
---|