Spring - это, как правило, среда для поддержки развития предприятия, что почти всегда означает какое-то веб-приложение (GUI или API) со встроенной бизнес-логикой.Если бы вам пришлось написать даже тривиальное веб-приложение на Java и придать ему какую-то осмысленную структуру - то есть весь код не упакован в один массивный класс без разделения ответственности - вы быстро начнете сталкиваться с такими вопросами, как,«Кто / что должно отвечать за создание экземпляров этих классов?»и "Как экземпляры получают другие экземпляры (зависимости), в которых они нуждаются?"Эти вопросы естественным образом приводят к необходимости в контейнере Dependency Injection / Inversion of Control, которым является Spring.
Более того, если вы практикуете разработку через тестирование, для любого нового разработчика нет оправдания не , чтобы практиковать, вы найдете дальнейшее напряжение в вопросе «получения зависимостей», поскольку объект, который создает свои собственные зависимости внутри, очень сложно протестировать по сравнению с объектом, который позволяет его зависимостям бытьinjected .
Это может быть только самое короткое начало ответа, но дайте мне знать, если это поможет, и если есть что-то еще, что я могу уточнить.
Обновление: Относительно вашего вопроса о создании bean-компонентов для представления каждого Ученика: это не совсем то, что предполагается использовать Spring - или контейнеры Dependency Injection в целом.Вы бы не написали определение XML-компонента для каждого ученика в вашем приложении.Между разными «типами» объектов есть иногда нечеткая грань.
Существуют объекты, которые содержат отличное состояние, которое отличает их от других объектов того же типа.Мы склонны называть этот тип объекта «сущностью» или «доменным объектом».Ваш ученик и учитель являются прекрасными примерами.Каждый экземпляр этих объектов будет представлять конкретного человека.
Другой тип объекта - это тип, который имеет нет отдельное состояние, которое отличает его от других объектов того же типа.Что еще более важно, он не имеет состояния в отношении какого-либо конкретного экземпляра объекта.Примером этого может быть объект доступа к данным (DAO), который инкапсулирует и скрывает сложность взаимодействия с реляционной базой данных.Он имеет состояние, как пул соединений, из которого он рисует соединения с базой данных, чтобы выполнить свою работу, но независимо от того, есть ли у вас один экземпляр DAO или 100, они все идентичны и взаимозаменяемы.
Мы всегда используемSpring для управления последней категорией объектов - объектов без состояния по отношению к другим объектам, с которыми они взаимодействуют.Как правило, мы просто создаем один из них (scope = "singleton", который является значением по умолчанию для Spring) и позволяем Spring связать их все вместе, чтобы заполнить все зависимости.
Для другой категории - сущностей- некоторые люди используют Spring для внедрения в них зависимостей, а некоторые нет.Однако никто явно не создает каждый из своих объектов-сущностей в виде bean-компонента Spring в файле XML.Объекты всегда создаются с помощью оператора new
, независимо от того, используете ли вы вы или какой-либо другой фреймворк, который их обрабатывает для вас.Однако есть и другие способы позволить Spring управлять объектом.Например, , используя AspectJ , вы можете сплести байт-код таким образом, чтобы при вызове конструктора (например, с new Student()
) не только создавался экземпляр, но и Spring выполнял внедрение зависимости от него.,Это больше стиль DI, который вы бы использовали с сущностью.