Package org.apache.tapestry5.ioc.internal

## Class RecursiveServiceCreationCheckWrapper

- java.lang.Object
- - org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper

- All Implemented Interfaces:
    `ObjectCreator`

      public class RecursiveServiceCreationCheckWrapper
      extends java.lang.Object
      implements ObjectCreator

  Decorator for `ObjectCreator` that ensures the service is only created once. This detects a situation where the service builder for a service directly or indirectly invokes methods on the service itself. This would show up as a second call up the ServiceCreator stack injected into the proxy, potentially leading to endless recursion. We try to identify that recursion and produce a useable exception report.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `RecursiveServiceCreationCheckWrapper​(ServiceDef serviceDef, ObjectCreator delegate, org.slf4j.Logger logger)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.lang.Object` | `createObject()` | We could make this method synchronized, but in the context of creating a service for a proxy, it will already be synchronized (inside the proxy).

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### RecursiveServiceCreationCheckWrapper

          public RecursiveServiceCreationCheckWrapper​(ServiceDef serviceDef,
                                                      ObjectCreator delegate,
                                                      org.slf4j.Logger logger)

  - ### Method Detail

    - #### createObject

          public java.lang.Object createObject()

      We could make this method synchronized, but in the context of creating a service for a proxy, it will already be synchronized (inside the proxy).
      Specified by:
        `createObject` in interface `ObjectCreator`