You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by GitBox <gi...@apache.org> on 2022/10/21 10:48:13 UTC

[GitHub] [skywalking] kezhenxu94 commented on pull request #9828: Add new config initialization mechanism of module provider to replace existing

kezhenxu94 commented on PR #9828:
URL: https://github.com/apache/skywalking/pull/9828#issuecomment-1286787021

   > The root cause of this change is when I want to extend an existing module provider to another, but need to add new configurations. In the previous implementations, most providers have to hold a field/pointer to the configuration, in order to use it in `init`/`start`/... stages. This should be fine until we want to extend and add a new configuration, a new configuration class could inherit from the existing config, but the new provider can't inherit the existing provider, because you can't inject the extended config to replace the config instance created and hold in the old provider.
   
   Hi, this is how I extend the provider AND the configuration. Let's take `AnalyzerModuleProvider` as an example.
   
   - Extend the configuration
   
   ```java
   public class MyAnalyzerModuleConfig extends AnalyzerModuleConfig {
     // This is my new configuration
     @Getter
     @Setter
     private String myNewConfiguration;
   }
   ```
   
   - Extend the provider
   
   ```java
   
   public class MyAnalyzerModuleProvider extends AnalyzerModuleProvider {
     private final MyAnalyzerModuleConfig newModuleConfig;
   
     public MyAnalyzerModuleProvider(MyAnalyzerModuleConfig newModuleConfig) {
       this.newModuleConfig = newModuleConfig;
     }
   
     @Override
     public ModuleConfig createConfigBeanIfAbsent() {
         return newModuleConfig;
     }
   
     @Override
     public void prepare() throws ServiceNotProvidedException, ModuleStartException {
         this.registerServiceImplementation(MyService.class, new MyService(newModuleConfig));
     }
   }
   ```
   
   - And the new service
   
   ```java
   
   public class MyAnalyzerModuleConfig extends AnalyzerModuleConfig {
     // This is my new configuration
     @Getter
     @Setter
     private String myNewConfiguration;
   }
   ```
   
   
   Did I understand correctly? Do we have anything new in this PR that we can't do in the previous implementation?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@skywalking.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org