我想澄清一下我的理解@FunctionalInterface
。据我所知,我们可以在只有一个抽象方法的接口上添加@FunctionalInterface注释(尽管它可以具有多个默认和静态方法。
在Java 8中,Comparator<T>
接口已用@FunctionalInterface标记,因此可以在Lambda表达式中使用,但是当我打开定义时,可以看到那里有2个抽象类
int compare(T o1, T o2);
和 boolean equals(Object obj);
我想了解在功能接口中怎么可能有两个以上的抽象方法,而仍然没有收到任何错误?帮助我清除对此的理解。
我有一个使用原型范围定义的组件。我想在我的服务类中使用该组件。我希望 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 的新实例,但我也听说这是一个不好的做法。请帮助我进行最佳实践。