Весенние бобы Жизнь - PullRequest
       3

Весенние бобы Жизнь

0 голосов
/ 08 августа 2011

Я пытаюсь понять логику программирования за пределами Spring. В примерах им часто дают конкретные имена, такие как «Duke» или «Kenny», более того, конкретные значения также задаются для конструкторов и сеттеров, которые вводятся в xml. Я думаю о бобах в более общем смысле, скажем:

Student basicStudent = new Student(grade, name); // gives me certain amount of flexibility where say for grade and name I can have different values, then I can deploy this new student to database. And every unique web request, lets say, I can recreate various instances of different students with this line. 

Но что делать с .xml? Я получаю статический компонент с предопределенными значениями:

Student Bob= (Student)appContext.getBean("Bob"); // where this bean is set with predefined values

Надеюсь, мое замешательство будет понято, я не могу думать о применении Spring Beans. Я не разработчик производства, я просто студент, поэтому я могу пропустить здесь важную концепцию. Зачем мне предварительно загруженные бины с уникальным экземпляром класса?

Спасибо,

Ответы [ 4 ]

2 голосов
/ 08 августа 2011

Я думаю, что ваша путаница заключается в разнице между Java-бинами и Spring-бинами. Spring bean - это Java bean, но тип bean-компонентов, которыми обычно управляет Spring, находится на более высоком уровне.

Класс Student - это Java-бин, который может использоваться в приложении как «объект данных» (DAO). Они будут созданы во время выполнения из пользовательского ввода, доступа к базе данных, чтения из файла и т. Д. Класс, который используется для создания этих объектов Student, является лучшим кандидатом на использование бина Spring - это будет StudentFactory »в обычной схеме именования шаблонов проектирования.

Управление компонентом StudentFactory в Spring означает, что метод генерации студентов можно настраивать. Для производства у вас может быть DBStudentFactory, который читает из базы данных. Для тестирования у вас может быть фабрика TestStudent, которая просто загружает карту.

1 голос
/ 08 августа 2011

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, который вы бы использовали с сущностью.

0 голосов
/ 17 июля 2017

после того, как вы объявили свои компоненты как XML-файл или предоставили их в качестве аннотаций для платформы, чтобы понять, что она должна делать.

enter image description here

Книга: Просто весна

0 голосов
/ 08 августа 2011

Существует множество преимуществ использования bean-компонентов.

  1. У вас есть контейнер IOC: http://en.wikipedia.org/wiki/Inversion_of_Control
  2. Контейнер IoC экономит массу времени, устраняя простые задачи, такие как настройкаисточник данных для доступа к базе данных.Источник данных может быть введен автоматически
  3. Тестирование проще, поскольку вы можете отсоединить объекты без особых усилий.
...