@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 в сочетании с интерфейсами, абстрактными классами и полиморфизмом для более гибкой и легкой работы с зависимостями в приложении.