Package org.springframework.aop.target

# Class LazyInitTargetSource

java.lang.Object
org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource
org.springframework.aop.target.LazyInitTargetSource

All Implemented Interfaces:
  `Serializable`, `TargetClassAware`, `TargetSource`, `org.springframework.beans.factory.Aware`, `org.springframework.beans.factory.BeanFactoryAware`

public class LazyInitTargetSource extends AbstractBeanFactoryBasedTargetSource
`TargetSource` that lazily accesses a singleton bean from a `BeanFactory`.

Useful when a proxy reference is needed on initialization but the actual target object should not be initialized until first use. When the target bean is defined in an `org.springframework.context.ApplicationContext` (or a `BeanFactory` that is eagerly pre-instantiating singleton beans) it must be marked as "lazy-init" too, else it will be instantiated by said `ApplicationContext` (or `BeanFactory`) on startup.

For example:

     <bean id="serviceTarget" class="example.MyService" lazy-init="true">
       ...
     </bean>

     <bean id="service" class="org.springframework.aop.framework.ProxyFactoryBean">
       <property name="targetSource">
         <bean class="org.springframework.aop.target.LazyInitTargetSource">
           <property name="targetBeanName"><idref local="serviceTarget"/></property>
         </bean>
       </property>
     </bean>

The "serviceTarget" bean will not get initialized until a method on the "service" proxy gets invoked.

Subclasses can extend this class and override the `postProcessTargetObject(Object)` to perform some additional processing with the target object when it is first loaded.

Since:
  1.1.4
Author:
  Juergen Hoeller, Rob Harrop
See Also:
  - `BeanFactory.getBean(java.lang.String)`
  - `postProcessTargetObject(java.lang.Object)`
  - Serialized Form

## Field Summary

### Fields inherited from class org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource

`logger`

## Constructor Summary

Constructors
Constructor
Description
`LazyInitTargetSource()`

## Method Summary

Modifier and Type
Method
Description
`Object`
`getTarget()`
Return a target instance.
`protected void`
`postProcessTargetObject(Object targetObject)`
Subclasses may override this method to perform additional processing on the target object when it is first loaded.

### Methods inherited from class org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource

`copyFrom, equals, getBeanFactory, getTargetBeanName, getTargetClass, hashCode, setBeanFactory, setTargetBeanName, setTargetClass, toString`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface org.springframework.aop.TargetSource

`isStatic, releaseTarget`

## Constructor Details

### LazyInitTargetSource

public LazyInitTargetSource()

## Method Details

### getTarget

public Object getTarget() throws org.springframework.beans.BeansException
Description copied from interface: `TargetSource`
Return a target instance. Invoked immediately before the AOP framework calls the "target" of an AOP method invocation.

Returns:
  the target object which contains the joinpoint, or `null` if there is no actual target instance
Throws:
  `org.springframework.beans.BeansException`

### postProcessTargetObject

protected void postProcessTargetObject(Object targetObject)
Subclasses may override this method to perform additional processing on the target object when it is first loaded.

Parameters:
  `targetObject` - the target object that has just been instantiated (and configured)