Что является лучшей практикой: используйте прототип bean вместо оператора new ()

Я пытаюсь понять, как правильно использовать бин-прототип Spring.     Может быть, следующий пример кода поможет вам понять мою дилемму:

List<ClassA> caList = new ArrayList<ClassA>();
    for (String name : nameList) {
        ClassA ca = new ClassA();

    //or Shall I use protypebean, using method lookup I can inject the dependency of ClassA. 
    // ClassA ca = getPrototypeClassA();

        ca.setName(name);
        caList.add(ca);
    }

Итак, моя точная точка зрения в этом сценарии - использовать метод инъекции или оператор new ().     Предоставьте свое мнение с обоснованием.

4 голоса | спросил 008ak89 3 Jam1000000amThu, 03 Jan 2019 08:45:44 +030019, 08:45:44

3 ответа


0
Вы можете использовать любой из этих способов, потому что в конечном итоге клиентский код отвечает за обработку жизненного цикла прототипа компонента, а не контейнера Spring.Согласно Spring-docs,В некоторых отношениях вы можете думать о роли контейнеров Spring, когда говорите о bean-объекте с прототипом, как о замене оператора Java 'new'.Все аспекты жизненного цикла после этой точки должны быть обработаны клиентом.Spring не управляет полным жизненным циклом bean-компонента-прототипа: контейнер создает, настраивает, декорирует и иным образом собирает объект-прототип, передает его клиенту, а затем больше не знает об этом экземпляре прототипа.Клиентский код отвечает за очистку прототипных объектов в области и высвобождение любых дорогостоящих ресурсов, которые удерживаются прототипными компонентами.
ответил Ankur 3 Jam1000000amThu, 03 Jan 2019 09:14:05 +030019, 09:14:05
0
Кажется, вашему экземпляру нужны некоторые значения времени выполнения для правильной инициализации.В таком случае это зависит от того, нужно ли вам использовать функцию пружины, такую ​​как AOP, для экземпляра ClassA.Если да, переходите к методу внедрения. Если нет, вы можете использовать фабричный шаблон.Намного больше ОО и чище для меняЧто-то вроде следующего.Вы должны получить идею.И код клиента:
ответил Ken Chan 3 Jam1000000amThu, 03 Jan 2019 09:49:33 +030019, 09:49:33
0
Если ---- +: = 0 =: + ---- необходимо иметь ссылки ---- +: = 1 =: + ---- , тогда перейдите к компоненту-прототипу.В противном случае подойдет простой POJO (о котором контейнер Spring не знает).
ответил Markus Pscheidt 4 Jpm1000000pmFri, 04 Jan 2019 22:09:30 +030019, 22:09:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132