У меня был спор с моим коллегой.
Какой из следующих 2 фрагментов кода вам больше нравится, учитывая, что «вместо наследования следует использовать композицию»?
1 )
class JsonToSpecificTransformer implements Transformer {
private final JsonToObjectTransformer jsonTransformer = Transformers.fromJson(Specific.class);
@Override
public Message<?> transform(Message<?> message) {
return jsonTransformer.transform(message);
}
}
2)
class JsonToSpecificTransformer2 extends JsonToObjectTransformer {
public JsonToSpecificTransformer2() {
super(Specific.class);
}
}
Класс Speci c покажет что-то вроде этого:
@Data
class Specific {
private int field1;
...
}
Я немного прокомментирую это 2 фрагмента кода:
1) использует композицию и сохраняет и внутренний объект, чтобы он не переинициализировался каждый раз.
2) использует наследование.
Спасибо!
Изменить:
Я использую DSL IntegrationFlow, например:
@Autowired
private JsonToSpecificTransformer jsonToSpecificTransformer;
@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from("myChannel")
.transform(Transformers.fromJson(service2.Specific.class)
or
.transform(jsonToSpecificTransformer)
...
}
Надеюсь, этот предыдущий код немного проясняет мои намерения.
И пытаюсь подвести итог:
@Bean
public JsonToObjectTransformer jsonToSpecificTransformer() {
return Transformers.fromJson(Specific.class);
}
---
@Autowired
//@Qualif...
private JsonToObjectTransformer jsonToSpecificTransformer;
@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from("myChannel")
.transform(jsonToSpecificTransformer)
...
}