class DiscoveryClientDecorator implements DiscoveryClient, DiscoveryClientDelegate<DiscoveryClient> {
    // private static final Logger LOG = LoggerFactory.getLogger(DiscoveryClientDecorator.class);

    private DiscoveryClient discoveryClient;
    private ConfigurableApplicationContext applicationContext;

    public DiscoveryClientDecorator(DiscoveryClient discoveryClient, ConfigurableApplicationContext applicationContext) {
        this.discoveryClient = discoveryClient;
        this.applicationContext = applicationContext;
    }

    public DiscoveryClient getDelegate() {
        return discoveryClient;
    }

    @Override
    public List<ServiceInstance> getInstances(String serviceId) {<FILL_FUNCTION_BODY>}

    public List<ServiceInstance> getRealInstances(String serviceId) {
        return discoveryClient.getInstances(serviceId);
    }

    @Override
    public List<String> getServices() {
        List<String> services = getRealServices();

        try {
            DiscoveryListenerExecutor discoveryListenerExecutor = applicationContext.getBean(DiscoveryListenerExecutor.class);
            discoveryListenerExecutor.onGetServices(services);
        } catch (BeansException e) {
            // LOG.warn("Get bean for DiscoveryListenerExecutor failed, ignore to executor listener");
        }

        return services;
    }

    public List<String> getRealServices() {
        return discoveryClient.getServices();
    }

    @Override
    public String description() {
        return discoveryClient.description();
    }
}

        List<ServiceInstance> instances = getRealInstances(serviceId);

        try {
            DiscoveryListenerExecutor discoveryListenerExecutor = applicationContext.getBean(DiscoveryListenerExecutor.class);
            discoveryListenerExecutor.onGetInstances(serviceId, instances);
        } catch (BeansException e) {
            // LOG.warn("Get bean for DiscoveryListenerExecutor failed, ignore to executor listener");
        }

        return instances;
    
<no_super_class>