这就是我现在的工作正常.它所做的只是一个返回项目对象数组的市场类:
我有上课的市场
class market {
public ArrayList<Items> createItems(HashMap<String,String> map) {
ArrayList<Items> array = new ArrayList<Items>();
for (Map.Entry<String, String> m : map.entrySet()) {
Item item = new Item();
item.setName(m.key());
item.setValue(m.value());
array.add(item);
}
return array;
}
}
Run Code Online (Sandbox Code Playgroud)
class Item是带有getter和setter的名称和值的简单类
以下是我的配置文件的外观:
@Configuration
public class MarketConfig {
@Bean
public Market market() {
return new Market();
}
}
Run Code Online (Sandbox Code Playgroud)
我想如何改变我的代码:(原因:我不想要
Item item = new Item();
Run Code Online (Sandbox Code Playgroud)
在那时的方法.我希望Spring将它注入市场)
class market {
public Item item;
//getters and setters for item
public ArrayList<Items> createItems(HashMap<String,String> map) {
ArrayList<Items> array = new …Run Code Online (Sandbox Code Playgroud) 我有一个使用原型范围定义的组件。我想在我的服务类中使用该组件。我希望 spring 在每次我调用它时都能为我提供该 Bean 的一个新实例。
组件类别:
@Getter
@Setter
@Component
@Scope("prototype")
public class ProtoTypeBean {
//.. Field variables
}
Run Code Online (Sandbox Code Playgroud)
服务等级:
@AllArgsConstructor
@Service
public class ServiceClass {
ProtoTypeBean prototypeBean;
ArrayList<ProtoTypeBean> prototypeBeans;
public void demoMethod(ArrayList<String> someArrayList) {
for(var singleString: someArrayList) {
prototypeBean.setFieldValue(singleString);
prototypeBeans.add(prototypeBean);
}
System.out.println(prototypeBeans.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
通过使用此配置,我在原型Beans ArrayList 中获得了相同的 ProtoTypeBean 实例。问题是,我如何让 Spring 理解每次在 foreach 循环中调用它时都会给我一个 prototypeBean 的新实例?我发现我可以使用 ApplicationContext.getBean() 在 foreach 循环中获取 Bean 的新实例,但我也听说这是一个不好的做法。请帮助我进行最佳实践。