org.springframework.aop.target

## Class ThreadLocalTargetSource

- java.lang.Object
- - org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource
  - - org.springframework.aop.target.AbstractPrototypeBasedTargetSource
    - - org.springframework.aop.target.ThreadLocalTargetSource

- All Implemented Interfaces:
    Serializable, ThreadLocalTargetSourceStats, TargetClassAware, TargetSource, Aware, BeanFactoryAware, DisposableBean

      public class ThreadLocalTargetSource
      extends AbstractPrototypeBasedTargetSource
      implements ThreadLocalTargetSourceStats, DisposableBean

  Alternative to an object pool. This TargetSource uses a threading model in which every thread has its own copy of the target. There's no contention for targets. Target object creation is kept to a minimum on the running server.

  Application code is written as to a normal pool; callers can't assume they will be dealing with the same instance in invocations in different threads. However, state can be relied on during the operations of a single thread: for example, if one caller makes repeated calls on the AOP proxy.

  Cleanup of thread-bound objects is performed on BeanFactory destruction, calling their `DisposableBean.destroy()` method if available. Be aware that many thread-bound objects can be around until the application actually shuts down.

  Author:
    Rod Johnson, Juergen Hoeller, Rob Harrop
  See Also:
    `ThreadLocalTargetSourceStats`, `DisposableBean.destroy()`, Serialized Form

- - ### Field Summary

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

      `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ThreadLocalTargetSource()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `destroy()` Dispose of targets if necessary; clear ThreadLocal.
    `int` | `getHitCount()` Return the number of hits that were satisfied by a thread-bound object.
    `int` | `getInvocationCount()` Return the number of client invocations.
    `int` | `getObjectCount()` Return the number of thread-bound objects created.
    `IntroductionAdvisor` | `getStatsMixin()` Return an introduction advisor mixin that allows the AOP proxy to be cast to ThreadLocalInvokerStats.
    `Object` | `getTarget()` Implementation of abstract getTarget() method.

    - ### Methods inherited from class org.springframework.aop.target.AbstractPrototypeBasedTargetSource

      `destroyPrototypeInstance, newPrototypeInstance, setBeanFactory, writeReplace`

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

      `copyFrom, equals, getBeanFactory, getTargetBeanName, getTargetClass, hashCode, isStatic, releaseTarget, setTargetBeanName, setTargetClass, toString`

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

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

- - ### Constructor Detail

    - #### ThreadLocalTargetSource

          public ThreadLocalTargetSource()

  - ### Method Detail

    - #### getTarget

          public Object getTarget()
                           throws BeansException

      Implementation of abstract getTarget() method. We look for a target held in a ThreadLocal. If we don't find one, we create one and bind it to the thread. No synchronization is required.
      Specified by:
        `getTarget` in interface `TargetSource`
      Returns:
        the target object, which contains the joinpoint
      Throws:
        `BeansException`

    - #### destroy

          public void destroy()

      Dispose of targets if necessary; clear ThreadLocal.
      Specified by:
        `destroy` in interface `DisposableBean`
      See Also:
        `AbstractPrototypeBasedTargetSource.destroyPrototypeInstance(java.lang.Object)`

    - #### getInvocationCount

          public int getInvocationCount()

      Description copied from interface: `ThreadLocalTargetSourceStats`
      Return the number of client invocations.
      Specified by:
        `getInvocationCount` in interface `ThreadLocalTargetSourceStats`

    - #### getHitCount

          public int getHitCount()

      Description copied from interface: `ThreadLocalTargetSourceStats`
      Return the number of hits that were satisfied by a thread-bound object.
      Specified by:
        `getHitCount` in interface `ThreadLocalTargetSourceStats`

    - #### getObjectCount

          public int getObjectCount()

      Description copied from interface: `ThreadLocalTargetSourceStats`
      Return the number of thread-bound objects created.
      Specified by:
        `getObjectCount` in interface `ThreadLocalTargetSourceStats`

    - #### getStatsMixin

          public IntroductionAdvisor getStatsMixin()

      Return an introduction advisor mixin that allows the AOP proxy to be cast to ThreadLocalInvokerStats.