code: public void destroy()
              throws Exception
      {
          if (!state.compareAndSet(State.STARTED, State.STOPPING)) {
              return;
          }
          for (LifeCycleListener listener : listeners) {
              listener.stoppingLifeCycle();
          }
  
          List<Object> reversedInstances = Lists.newArrayList(managedInstances);
          Collections.reverse(reversedInstances);
  
          for (Object obj : reversedInstances) {
              for (LifeCycleListener listener : listeners) {
                  listener.stoppingInstance(obj);
              }
              LifeCycleMethods methods = methodsMap.get(obj.getClass());
              for (Method preDestroy : methods.methodsFor(PreDestroy.class)) {
                  for (LifeCycleListener listener : listeners) {
                      listener.preDestroyingInstance(obj, preDestroy);
                  }
                  preDestroy.invoke(obj);
              }
          }
  
          state.set(State.STOPPED);
          for (LifeCycleListener listener : listeners) {
              listener.stoppedLifeCycle();
          }
      }
docs: Stop the life cycle - all instances will have their {@link javax.annotation.PreDestroy} method(s) called
  
  @throws Exception errors