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, Aware, 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 `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 and Description
    `LazyInitTargetSource()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and 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, isStatic, releaseTarget, setBeanFactory, setTargetBeanName, setTargetClass, toString`

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

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

- - ### Constructor Detail

    - #### LazyInitTargetSource

          public LazyInitTargetSource()

  - ### Method Detail

    - #### getTarget

          public Object getTarget()
                           throws 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
      Throws:
        `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)