Я недавно столкнулся с этой проблемой. Я уверен, что должен быть лучший способ, чем мой, но я так и сделал:
public class ServiceClass {
ArrayList<ProtoTypeBean> prototypeBeans = new ArrayList<>();
@Autowired
ApplicationContext ctx;
public void demoMethod(ArrayList<String> someArrayList) {
for(var singleString: someArrayList) {
//magic is in below line.. getting a bean from ApplicatioContext.
ProtoTypeBean prototypeBean= ctx.getBean("protoTypeBean"); //Or ctx.getBean(ProtoTypeBean.class);
prototypeBean.setFieldValue(qBean.getFieldValue());
prototypeBeans.add(prototypeBean);
}
System.out.println(prototypeBeans.toString());
}
Таким образом, контейнер Spring всегда дает вам новый экземпляр. И это полностью управляется контейнером Spring.
То, как вы это попробовали, я тоже это попробовал, но он всегда вставлял один экземпляр во время автопроводки, следовательно, побеждал цель создания прототипа.
Вы могли бы пойти путем использования new
Ключевого слова. Но тогда это просто обычная реализация Java и Я думаю , что новый экземпляр не управляется Spring, потому что он помечен @Component
вместо @Configuration
. Хотя я могу ошибаться.