class SofaRuntimeAwareProcessor implements BeanPostProcessor, PriorityOrdered {

    private final SofaRuntimeManager    sofaRuntimeManager;

    private final SofaRuntimeContext    sofaRuntimeContext;

    private final ClientFactoryInternal clientFactory;

    private final ExtensionClientImpl   extensionClient;

    public SofaRuntimeAwareProcessor(SofaRuntimeManager sofaRuntimeManager) {
        this.sofaRuntimeManager = sofaRuntimeManager;
        this.sofaRuntimeContext = sofaRuntimeManager.getSofaRuntimeContext();
        this.clientFactory = sofaRuntimeManager.getClientFactoryInternal();
        this.extensionClient = new ExtensionClientImpl(sofaRuntimeContext);
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName)
                                                                               throws BeansException {<FILL_FUNCTION_BODY>}

    @Override
    public int getOrder() {
        return PriorityOrdered.HIGHEST_PRECEDENCE;
    }
}

        if (bean instanceof SofaRuntimeContextAware) {
            ((SofaRuntimeContextAware) bean).setSofaRuntimeContext(sofaRuntimeContext);
        }
        if (bean instanceof ClientFactoryAware) {
            ((ClientFactoryAware) bean).setClientFactory(clientFactory);
        }
        if (bean instanceof ExtensionClientAware) {
            ((ExtensionClientAware) bean).setExtensionClient(extensionClient);
        }
        if (bean instanceof JvmFilter) {
            sofaRuntimeContext.getJvmFilterHolder().addJvmFilter((JvmFilter) bean);
        }
        if (bean instanceof RuntimeShutdownAware) {
            sofaRuntimeManager.registerShutdownAware((RuntimeShutdownAware) bean);
        }

        return bean;
    
<no_super_class>