Я пытался обернуть голову вокруг Io C и инъекции зависимости. Я думаю, что начинаю понимать преимущества внедрения зависимостей в большие приложения. Если я правильно понимаю, внедрение зависимостей выгодно, когда у вас есть согласованные интерфейсы, так как вы сможете изменять только реализацию, не меняя всего своего приложения.
Что я не понимаю, так это то, где XML входит во все это (и я знаю, что есть другие методы Io C, такие как аннотации, но если ответ не будет "XML отстой, и вы следует использовать аннотации ", давайте пока не будем go).
В чем разница между управлением этим:
public class MyApp {
public static void main(String[] args) {
ItemFinder theQuarterFinder = new QuarterItemFinder();
FortuneService theFortune = new HappyFortuneService(theQuarterFinder);
Coach theCoach = new WrestlingCoach(theFortune);
System.out.println(theCoach.getDailyWorkout());
System.out.println(theCoach.getDailyFortune());
System.out.println(theCoach.getItem());
}
}
и управлением этим с помощью xml:
public class HelloSpringApp {
public static void main(String[] args) {
//Load spring configuration file
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
//Retrieve bean from spring container
Coach theCoach = context.getBean("myCoach", Coach.class);
System.out.println(theCoach.getDailyWorkout());
System.out.println(theCoach.getDailyFortune());
System.out.println(theCoach.getItem());
context.close();
}
}
<bean id="myItemFinder" class="com.luv2code.springdemo.QuarterItemFinder">
</bean>
<bean id="myFortune"
class="com.luv2code.springdemo.HappyFortuneService">
<constructor-arg ref="myItemFinder" />
</bean>
<bean id="myCoach" class="com.luv2code.springdemo.WrestlingCoach">
<constructor-arg ref="myFortune" />
</bean>
Если бы я изменил Реализация itemFinder, я бы изменил точно такой же объем кода, делая это только в файле XML по сравнению с основной функцией приложения. Это действительно предпочтительнее? Попытка отследить ссылки в XML кажется более сложной, чем просто изменить один из «новых» вызовов в MyApp.
Если я правильно понимаю, оба примера делают внедрение зависимостей. Вы просто перемещаете логи c из приложения в файл XML. и создает бобы весны. Но мы вроде делаем бобы даже без XML контекста, верно?