Я понимаю как можно использовать Spring, но я до сих пор не могу понять то, о чём везде так пишут: "Мы разрываем жёсткую связку между классами" и т.д., и т.п.
Но ведь мы и так жёстко всё прописываем либо в аннотациях, либо в *.xml, да и к тому же в Main, когда пишем что-то вида:
Cat cat = context.getBean(Cat.class);
Dog dog = (Dog) context.getBean("dog");
Parrot parrot = context.getBean("parrot-kesha", Parrot.class);
Мы ведь и так тут всё жёстко прописали.
Также, Spring использует интерфейсы для ухода от жёсткой зависимости между классами. Тогда что мне мешает без Spring сделать интерфейс IAnimals и в нём метод void voice();,
а потом, просто сделать:
class Cat implements IAnimals {
public void voice() {
System.out.print("myau");
}}
class Dog implements IAnimals {
public void voice() {
System.out.print("gav");
}}
class Parrot implements IAnimals {
public void voice() {
System.out.print("kesha");
}}
Вот эту разницу между обычным программированием и программированием с использованием Spring я не могу понять.