org.springframework.aop.target
Class AbstractPrototypeBasedTargetSource

java.lang.Object
  extended byorg.springframework.aop.target.AbstractPrototypeBasedTargetSource
All Implemented Interfaces:
BeanFactoryAware, InitializingBean, java.io.Serializable, TargetSource
Direct Known Subclasses:
AbstractPoolingTargetSource, PrototypeTargetSource, ThreadLocalTargetSource

public abstract class AbstractPrototypeBasedTargetSource
extends java.lang.Object
implements TargetSource, BeanFactoryAware, InitializingBean, java.io.Serializable

Base class for dynamic TargetSources that can create new prototype bean instances to support a pooling or new-instance-per-invocation strategy.

Such TargetSources must run in a BeanFactory, as it needs to call the getBean() method to create a new prototype instance.

PrototypeBasedTargetSources are serializable. This involves disconnecting the current target and turning into a SingletonTargetSource.

Author:
Rod Johnson, Juergen Hoeller
See Also:
BeanFactory.getBean(java.lang.String), Serialized Form

Field Summary
protected  org.apache.commons.logging.Log logger
           
 
Constructor Summary
AbstractPrototypeBasedTargetSource()
           
 
Method Summary
 void afterPropertiesSet()
          Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).
 java.lang.String getTargetBeanName()
          Return the name of the target bean in the factory.
 java.lang.Class getTargetClass()
          Return the type of targets returned by this TargetSource.
 boolean isStatic()
          Will all calls to getTarget() return the same object?
protected  java.lang.Object newPrototypeInstance()
          Subclasses should use this method to create a new prototype instance.
 void setBeanFactory(BeanFactory beanFactory)
          Set the owning BeanFactory.
 void setTargetBeanName(java.lang.String targetBeanName)
          Set the name of the target bean in the factory.
protected  java.lang.Object writeReplace()
          Replaces this object with a SingletonTargetSource on serialization.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.springframework.aop.TargetSource
getTarget, releaseTarget
 

Field Detail

logger

protected final org.apache.commons.logging.Log logger
Constructor Detail

AbstractPrototypeBasedTargetSource

public AbstractPrototypeBasedTargetSource()
Method Detail

setTargetBeanName

public void setTargetBeanName(java.lang.String targetBeanName)
Set the name of the target bean in the factory. This bean should be a prototype, or the same instance will always be obtained from the factory, resulting in the same behavior as the InvokerInterceptor.

Parameters:
targetBeanName - name of the target bean in the BeanFactory that owns this interceptor

getTargetBeanName

public java.lang.String getTargetBeanName()
Return the name of the target bean in the factory.


setBeanFactory

public void setBeanFactory(BeanFactory beanFactory)
                    throws BeansException
Set the owning BeanFactory. We need to save a reference so that we can use the getBean() method on every invocation.

Specified by:
setBeanFactory in interface BeanFactoryAware
Parameters:
beanFactory - owning BeanFactory (may not be null). The bean can immediately call methods on the factory.
Throws:
BeansException - in case of initialization errors
See Also:
BeanInitializationException

afterPropertiesSet

public void afterPropertiesSet()
Description copied from interface: InitializingBean
Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).

This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.

Specified by:
afterPropertiesSet in interface InitializingBean

getTargetClass

public java.lang.Class getTargetClass()
Description copied from interface: TargetSource
Return the type of targets returned by this TargetSource. Can return null, although certain usages of a TargetSource might just work with a predetermined target class.

Specified by:
getTargetClass in interface TargetSource

isStatic

public boolean isStatic()
Description copied from interface: TargetSource
Will all calls to getTarget() return the same object? In that case, there will be no need to invoke releaseTarget(), and the AOP framework can cache the return value of getTarget().

Specified by:
isStatic in interface TargetSource
Returns:
whether the target is immutable.

newPrototypeInstance

protected java.lang.Object newPrototypeInstance()
Subclasses should use this method to create a new prototype instance.


writeReplace

protected java.lang.Object writeReplace()
                                 throws java.io.ObjectStreamException
Replaces this object with a SingletonTargetSource on serialization. Protected as otherwise it won't be invoked for subclasses. (The writeReplace() method must be visible to the class being serialized.)

With this implementation of this method, there is no need to mark non-serializable fields in this class or subclasses as transient.

Throws:
java.io.ObjectStreamException


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