private int getPhase(String containerBeanName) { Object container = this.context.getBean(containerBeanName); if (!(container instanceof Phased)) { throw new IllegalStateException("Container '" + containerBeanName + "' does not implement Phased."); } return ((Phased) container).getPhase(); }
/** * Examines an object and sets up a {@code Lifecycle} instance if it can be closed. * If it implements {@code Phased} then the phase is used. * * @param instance the object to examine, not null */ private void findAndRegisterLifeCycle(final Object instance) { if (ReflectionUtils.isCloseable(instance.getClass())) { registerLifecycle0(new PhasedLifecycle() { @Override public void stop() { ReflectionUtils.close(instance); } @Override public void start() { } @Override public boolean isRunning() { return false; } @Override public int getPhase() { if (instance instanceof Phased) { return ((Phased) instance).getPhase(); } return 0; } @Override public String toString() { return instance.getClass().getSimpleName() + ":" + instance.toString(); } }); } }
/** * Registers a non-component object that requires closing or shutdown when * the repository stops. * <p> * Certain interfaces are automatically detected. * If it implements {@code InitializingBean}, then it will be initialized * as though using {@link #initialize(InitializingBean)}. * If it implements {@code Phased} then the phase is used. * * @param obj the object to close/shutdown, not null * @param methodName the method name to call, not null */ public void registerLifecycleStop(final Object obj, final String methodName) { ArgumentChecker.notNull(obj, "object"); ArgumentChecker.notNull(methodName, "methodName"); checkStatus(Status.CREATING); initialize0(obj); registerLifecycle0(new PhasedLifecycle() { @Override public void stop() { ReflectionUtils.invokeNoArgsNoException(obj, methodName); } @Override public void start() { } @Override public boolean isRunning() { return false; } @Override public int getPhase() { if (obj instanceof Phased) { return ((Phased) obj).getPhase(); } return 0; } @Override public String toString() { return obj.getClass().getSimpleName() + ":" + obj.toString(); } }); _logger.logDebug(" Registered lifecycle-stop: " + obj); }
/** * Registers a {@code Lifecycle} instance. * * @param lifecycleObject the object that has a lifecycle, not null */ private void registerLifecycle0(Lifecycle lifecycleObject) { Integer phase = 0; if (lifecycleObject instanceof Phased) { phase = ((Phased) lifecycleObject).getPhase(); } List<Lifecycle> list = _lifecycles.get(phase); if (list == null) { list = new ArrayList<>(); _lifecycles.put(phase, list); } list.add(lifecycleObject); }
public int getPhase(String containerBeanName) { Object container = this.context.getBean(containerBeanName); if (!(container instanceof Phased)) { throw new IllegalStateException("Container '" + containerBeanName + "' does not implement Phased."); } return ((Phased) container).getPhase(); }
/** * Determine the lifecycle phase of the given bean. * <p>The default implementation checks for the {@link Phased} interface. * Can be overridden to apply other/further policies. * @param bean the bean to introspect * @return the phase an an integer value. The suggested default is 0. * @see Phased * @see SmartLifecycle */ protected int getPhase(Lifecycle bean) { return (bean instanceof Phased ? ((Phased) bean).getPhase() : 0); }
/** * Determine the lifecycle phase of the given bean. * <p>The default implementation checks for the {@link Phased} interface. * Can be overridden to apply other/further policies. * @param bean the bean to introspect * @return the phase an integer value. The suggested default is 0. * @see Phased * @see SmartLifecycle */ protected int getPhase(Lifecycle bean) { return (bean instanceof Phased ? ((Phased) bean).getPhase() : 0); }