Spring Boot中如何处理ArrayLists(Java)?即自动装配/依赖注入[关闭]

问题描述 投票:0回答:1

我正在进行在线编码评估,我应该“重构/修复”一些 Spring Boot API,它有一个 Cart.javaCatalog.javaProduct.java Model 类,如果我正确回忆起来(IIRC),Product.java是唯一具有@Component注释的Model类(附带问题,但何时使用@Component而不是@Entity)对于这些类型的 model 类或 POJOsDTOs?),意味着其他类 Cart.java 和 Catalog,使用“new”关键字实例化,这对我来说完全错误。

此外,其中一些类,例如Cart.java,具有类级别/字段,它们是像数组列表这样的数据结构,并且它们在构造函数中使用“新”键盘来实例化;这是正确的吗?我不断收到“bean 实例化异常”错误,我感觉这与此有关,即(另外,我的问题如下!)

public class Cart {

   private List<Product> products;

   public Cart() {
      this.products = new ArrayList();
}

问题:

  1. 这是好的做法吗?或者任何类型的 Java POJO(普通旧 java 对象),即本质上具有 getter/setter 的 Model 类应该始终被注释为 Spring Bean (或使用 XML/属性对于旧版本)?
  2. 关于数据结构,如上面提到的数组列表,它们应该在类级别/字段级别使用“new”关键字声明,还是像我发布的示例代码一样在构造函数内完成?
  3. 我为评估提供的代码在 ShoppingCartService 类中也有一个 @PostConstruct 方法,这当然是典型的服务类。它有一个 try/catch 块,其中使用 ObjectMapper()getResourceAsStream() 方法来读取包含示例虚拟数据的 products.json 文件;我不断收到异常,就像我对 beanInstantiation 等所说的那样...还有一些针对此 public void init() 方法,该方法用 ShoppingCartService 中的 @PostConstruct 注释进行注释 - 不应该所有 @PostConstruct 方法在 main SpringBootApplication 中,在本例中,ShopApplication.java static void Main 方法在哪里?

将不胜感激任何见解!谢谢!

java spring spring-boot dependency-injection spring-annotations
1个回答
-1
投票

通常不,您不应该实例化产品,因为您通常期望存储库类是一个集合。 至于你的答案,通常模型类不应该用 @Component 注释,因为它们通常不是 spring 管理的 bean,它们是实体。

实体不应该用@Component注释,因为@Component的bean范围是单例的,这是spring中bean的默认范围。

© www.soinside.com 2019 - 2024. All rights reserved.