Добрый день. Помогите пожалуйста разобраться.
Уже несколько раз встречал такую ситуацию: при использовании крупных продуктов типа Spring.
Для написания кастомной логики каких то модулей необходимо отнаследоваться от какого нибудь класса (типа AbstarctSecContext) , и с помощью аннотации Override переписать некоторые модули, например чтобы заработал шаблонизатор свой.
И мне непонятен сам механизм этого действия. Например как программа узнает, что у кода продукта появился наследник , и нужно его использовать , а не предыдущую реализации в свой работе?
Снизу привожу пример учебного кода по kafka streams, где пишется свой коннектор.
public class TestSinkConnector extends SinkConnector {
public static final String FILE_CONFIG = "file";
public static final String NAME_CONFIG = "numb";
// config start
private static final ConfigDef CONFIG_DEF = new ConfigDef()
.define(FILE_CONFIG, Type.STRING, Importance.HIGH, "Destination filename");
// config end
private String fileName = "/tmp/monitor.txt";
@Override
public String version() {
return "1.0";
}
@Override
public void start(Map<String, String> props) {
// config start
AbstractConfig parsedConfig = new AbstractConfig(CONFIG_DEF, props);
fileName = parsedConfig.getString(FILE_CONFIG);
// config end
}
@Override
public Class<? extends Task> taskClass() {
return TestSinkTask.class;
}
@Override
public List<Map<String, String>> taskConfigs(int maxTasks) {
ArrayList<Map<String, String>> configs = new ArrayList<>();
for(int i=0; i<maxTasks; i++) {
Map<String, String> config = new HashMap<>();
config.put(NAME_CONFIG,"NUMBER-"+(i+1));
config.put(FILE_CONFIG,fileName);
configs.add(config);
}
return configs;
}
@Override
public void stop() {
}
@Override
public ConfigDef config() {
return new ConfigDef();
}
}