@Component 是否包含其他 @Components 而这些 @Components 也包含 @Components 在 SpringBoot 中是个坏主意?

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

想想这个场景。我有一个组件 @Autowired 另一个组件也 @Autowired 另一个组件。

Animal.java

@Component
public class Animal{
   @Autowired
   private Dog dog;
...
}

狗.java

@Componet
public class Dog{
   @Autowired
   private Fight fight;
....
}

Fight.java

@Component
public class Fight{
....
}

假设@Component Animal 的深度是 3。想象一下这个深度是 10。这会不会很糟糕?如何避免这种情况?

java spring spring-boot components autowired
2个回答
1
投票

没错,但在你的情况下,我认为你需要使用一个接口,然后你可以使用构造函数注入

Fight
对象。

例如:

public interface Animal {
    private Fight fight;
}

然后你应该像这样实现每个动物:

public Dog implements Animal {

   public Dog() { }

   @Autowired
   public Dog(Fight fight) {
       this.fight = fight;
   }
}

public Cat implements Animal {

   public Cat() { }

   @Autowired
   public Cat(Fight fight) {
       this.fight = fight;
   }
}

您不需要使用明确的

@Autowired
。您可以使用
final
关键字声明该属性。例如:

@Component
public class Animal{

  private final Dog dog;

}

0
投票

没有错。但你最好让动物成为一个接口,然后自动连接其他服务。另请注意,如果您确切定义该组件是什么而不是在@Component 中说,那会更好。例如,如果战斗是一项服务,请使用@Service。

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