Я пытаюсь понять, как правильно использовать Spring. Не синтаксически, но по назначению. Если кто-то использует Spring, то должен ли Spring-код заменить весь код создания бина? Когда использовать, а когда не использовать Spring, для создания экземпляра bean-компонента?
Может быть, следующий пример кода поможет вам понять мою дилемму:
List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
ClassA ca = new ClassA();
ca.setName(name);
caList.add(ca);
}
Если я настрою Spring, он станет примерно таким:
List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
ClassA ca = (ClassA)SomeContext.getBean(BeanLookupConstants.CLASS_A);
ca.setName(name);
caList.add(ca);
}
Я лично думаю, что использование Spring здесь - это ненужные накладные расходы, потому что
- Код проще читать / понимать.
- Это не очень хорошее место для внедрения зависимостей, так как я не ожидаю, что будет многократная / разнообразная реализация
ClassA
, которую я хотел бы свободно заменить использованием конфигурации Spring на более позднем этапе.
Я правильно думаю? Если нет, то где я иду не так?
Если это фасоль , вы должны позволить Spring построить его ( за исключением вы можете поставить заводскую боб - я использовал что там , где мне нужно , чтобы вернуть конкретный подкласс зависит от системного свойства - и вы должны обратиться к документации на
@Configuration
и@Bean
аннотации если ты это делаешь). Если это не bean-компонент, а просто обычный Java-объект, вам не нужно использовать Spring для его создания. POJO полезны, но не будут получать инъекцию зависимостей, оболочки AOP и т. Д., Так как это то, что Spring добавляет для вас.Фундаментальное решение заключается в том, действительно ли это бин или просто какой-то обычный объект, который следует некоторым соглашениям бина (например, именование методов). Я не могу догадаться, что на самом деле имеет место из небольшого примера, который вы дали.
источник
Я могу ошибаться, эксперты, пожалуйста, поправьте.
Вся концепция Bean в контексте Spring заключается в том, что Spring Container заботится об объекте. Это рождение, это сфера жизненного цикла, смерть и т. Д. Это как будто смотритель объекта. Приложение, которое нуждается в этом, вводит его.
Поэтому, принимая решение во время проектирования вашего модуля, всегда думайте, хотите ли вы, чтобы Spring Framework позаботился об этом, или это простой объект, жизненный цикл которого заключен в методе.
Как уже предлагалось ранее, объекты dao Объекты jms queues и т. Д. Тяжелы и лучше оставить их специалисту, который является Spring Framework, чтобы позаботиться об этом.
источник