class ExtensionPointComponent extends AbstractComponent {

    private static final String       LINK_SYMBOL                    = "$";

    public static final ComponentType EXTENSION_POINT_COMPONENT_TYPE = new ComponentType(
                                                                         "extension-point");
    // Extension
    private final ExtensionPoint      extensionPoint;

    public ExtensionPointComponent(ExtensionPoint extensionPoint,
                                   SofaRuntimeContext sofaRuntimeContext,
                                   Implementation implementation) {
        this.extensionPoint = extensionPoint;
        this.sofaRuntimeContext = sofaRuntimeContext;
        this.implementation = implementation;
        this.componentName = ComponentNameFactory.createComponentName(
            EXTENSION_POINT_COMPONENT_TYPE, implementation.getName() + LINK_SYMBOL
                                            + this.extensionPoint.getName());
    }

    @Override
    public ComponentType getType() {
        return EXTENSION_POINT_COMPONENT_TYPE;
    }

    @Override
    public void activate() throws ServiceRuntimeException {
        super.activate();

        ComponentManager componentManager = sofaRuntimeContext.getComponentManager();

        for (ComponentInfo componentInfo : componentManager.getComponents()) {
            if (componentInfo.getType().equals(ExtensionComponent.EXTENSION_COMPONENT_TYPE)
                && !componentInfo.isResolved()) {
                ExtensionComponent extensionComponent = (ExtensionComponent) componentInfo;
                if (extensionComponent.getExtension().getTargetComponentName()
                    .equals(componentName)) {
                    componentManager.resolvePendingResolveComponent(componentInfo.getName());
                }
            }
        }
    }

    @Override
    public void deactivate() throws ServiceRuntimeException {<FILL_FUNCTION_BODY>}

    public ExtensionPoint getExtensionPoint() {
        return extensionPoint;
    }
}

        ComponentManager componentManager = sofaRuntimeContext.getComponentManager();

        for (ComponentInfo componentInfo : componentManager.getComponents()) {
            if (componentInfo.getType().equals(ExtensionComponent.EXTENSION_COMPONENT_TYPE)) {
                ExtensionComponent extensionComponent = (ExtensionComponent) componentInfo;
                if (extensionComponent.getExtension().getTargetComponentName()
                    .equals(componentName)) {
                    componentManager.unregister(componentInfo);
                }
            }
        }

        if (componentStatus != ComponentStatus.ACTIVATED) {
            return;
        }

        // skip deactivate SpringImplementationImpl because it's already deactivated
        if (this.implementation != null && !(implementation instanceof SpringImplementationImpl)) {
            Object target = this.implementation.getTarget();
            if (target instanceof ComponentLifeCycle) {
                ((ComponentLifeCycle) target).deactivate();
            }
        }
        componentStatus = ComponentStatus.RESOLVED;
    
<methods>public non-sealed void <init>() ,public void activate() throws com.alipay.sofa.runtime.api.ServiceRuntimeException,public boolean canBeDuplicate() ,public void deactivate() throws com.alipay.sofa.runtime.api.ServiceRuntimeException,public java.lang.String dump() ,public void exception(java.lang.Exception) throws com.alipay.sofa.runtime.api.ServiceRuntimeException,public org.springframework.context.ApplicationContext getApplicationContext() ,public com.alipay.sofa.runtime.spi.component.SofaRuntimeContext getContext() ,public com.alipay.sofa.runtime.spi.component.Implementation getImplementation() ,public com.alipay.sofa.runtime.api.component.ComponentName getName() ,public Map<java.lang.String,com.alipay.sofa.runtime.api.component.Property> getProperties() ,public com.alipay.sofa.runtime.model.ComponentStatus getState() ,public boolean isActivated() ,public com.alipay.sofa.runtime.spi.health.HealthResult isHealthy() ,public boolean isResolved() ,public void register() ,public boolean resolve() ,public void setApplicationContext(org.springframework.context.ApplicationContext) ,public void unregister() throws com.alipay.sofa.runtime.api.ServiceRuntimeException,public void unresolve() throws com.alipay.sofa.runtime.api.ServiceRuntimeException<variables>protected org.springframework.context.ApplicationContext applicationContext,protected com.alipay.sofa.runtime.api.component.ComponentName componentName,protected com.alipay.sofa.runtime.model.ComponentStatus componentStatus,protected java.lang.Exception e,protected com.alipay.sofa.runtime.spi.component.Implementation implementation,protected Map<java.lang.String,com.alipay.sofa.runtime.api.component.Property> properties,protected com.alipay.sofa.runtime.spi.component.SofaRuntimeContext sofaRuntimeContext