sustain/src/main/java/net/happyonroad/component/container/support/DefaultComponentLoader.java
public void quickUnload(Component component) {
        if (component.isAggregating()) {
            logger.trace("Remove aggregating component {}", component);
            loadedFeatures.remove(component);
        } else if (component.isPlain()) {
            logger.trace("Remove plain component {}", component);
            loadedFeatures.remove(component);
        } else {
            if (isUnloading(component)) return;
            long start = System.currentTimeMillis();
            unloading(component);
            logger.info("Unloading {}", component);
            for (FeatureResolver resolver : reverseResolvers) {
                if (resolver.hasFeature(component)) {
                    resolver.release(component);
                }
            }
            loadedFeatures.remove(component);
            unloaded(component);
            logger.info("Unloaded  {} ({})", component, formatDurationHMS(System.currentTimeMillis() - start));
        }
    }
public void quickUnload(Component component) {
        if (component.isAggregating()) {
            logger.trace("Remove aggregating component {}", component);
            loadedFeatures.remove(component);
        } else if (component.isPlain()) {
            logger.trace("Remove plain component {}", component);
            loadedFeatures.remove(component);
        } else {
            if (isUnloading(component)) return;
            long start = System.currentTimeMillis();
            unloading(component);
            logger.info("Unloading {}", component);
            for (FeatureResolver resolver : reverseResolvers) {
                if (resolver.hasFeature(component)) {
                    resolver.release(component);
                }
            }
            loadedFeatures.remove(component);
            unloaded(component);
            logger.info("Unloaded  {} ({})", component, formatDurationHMS(System.currentTimeMillis() - start));
        }
    }
public void quickUnload ( Component component ) { if ( component . isAggregating ( ) ) { logger . trace ( "Remove aggregating component {}" , component ) ; loadedFeatures . remove ( component ) ; } else if ( component . isPlain ( ) ) { logger . trace ( "Remove plain component {}" , component ) ; loadedFeatures . remove ( component ) ; } else { if ( isUnloading ( component ) ) return ; long start = System . currentTimeMillis ( ) ; unloading ( component ) ; logger . info ( "Unloading {}" , component ) ; for ( FeatureResolver resolver : reverseResolvers ) { if ( resolver . hasFeature ( component ) ) { resolver . release ( component ) ; } } loadedFeatures . remove ( component ) ; unloaded ( component ) ; logger . info ( "Unloaded  {} ({})" , component , formatDurationHMS ( System . currentTimeMillis ( ) - start ) ) ; } }
实际卸载一个组件

@param component 被卸载的组件
实际卸载一个组件