Sobes.tech
Back to questions
Junior — Middle
75

Каким образом можно применить одну и ту же бизнес-логику к разным компонентам Bean в Spring, избегая дублирования кода?

Companies where asked
Альфа-БанкАльфа-Банк

Answer from AI

sobes.tech AI

Чтобы применить одну и ту же бизнес-логику к разным компонентам Bean в Spring и избежать дублирования кода, можно использовать несколько подходов:

  1. Вынести общую логику в отдельный сервис или компонент — создать отдельный класс с бизнес-логикой и внедрять его в нужные Beans через @Autowired.

  2. Использовать наследование — создать базовый класс с общей логикой, а компоненты расширять этот класс.

  3. Применить аспектно-ориентированное программирование (AOP) — выделить общую логику в аспект, который будет применяться к нужным методам разных Beans.

Пример с сервисом:

@Service
public class CommonBusinessLogic {
    public void execute() {
        // общая бизнес-логика
    }
}

@Component
public class BeanA {
    private final CommonBusinessLogic commonLogic;

    @Autowired
    public BeanA(CommonBusinessLogic commonLogic) {
        this.commonLogic = commonLogic;
    }

    public void doWork() {
        commonLogic.execute();
        // специфичная логика BeanA
    }
}

@Component
public class BeanB {
    private final CommonBusinessLogic commonLogic;

    @Autowired
    public BeanB(CommonBusinessLogic commonLogic) {
        this.commonLogic = commonLogic;
    }

    public void doWork() {
        commonLogic.execute();
        // специфичная логика BeanB
    }
}

Такой подход позволяет централизовать бизнес-логику и переиспользовать её в разных компонентах.