@lilla.herman
В Spring полиморфизм можно использовать следующими способами:
Это два базовых способа использования полиморфизма в Spring. В обоих случаях вы можете менять реализацию сервиса, не затрагивая код потребителей.
@lilla.herman
Также, в Spring можно использовать полиморфизм с помощью аннотации @Component и ее производных (@Service, @Repository, @Controller). Создайте несколько классов, помеченных соответствующими аннотациями, с общим интерфейсом или наследуемым абстрактным классом. Затем можно использовать аннотацию @Autowired для внедрения зависимости на основе интерфейса или абстрактного класса.
Допустим, у нас есть интерфейс MyService, а также реализации MyServiceA и MyServiceB, помеченные аннотацией @Service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public interface MyService { void doSomething(); } @Service public class MyServiceA implements MyService { public void doSomething() { System.out.println("Doing something in Service A"); } } @Service public class MyServiceB implements MyService { public void doSomething() { System.out.println("Doing something in Service B"); } } |
Затем мы можем использовать полиморфизм в других классах для работы с MyService:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@Controller public class MyController { private final MyService service; @Autowired public MyController(MyService service) { this.service = service; } public void performAction() { service.doSomething(); } } |
При внедрении MyService в MyController Spring автоматически выберет подходящую имплементацию, и метод performAction будет вызывать соответствующий метод конкретной имплементации MyService.
Таким образом, можно использовать аннотации Spring в сочетании с интерфейсами, абстрактными классами и полиморфизмом для более гибкой и легкой работы с зависимостями в приложении.