gpt4 book ai didi

java - 是否可以通过Spring组件扫描来声明复杂的类依赖?

转载 作者:行者123 更新时间:2023-12-01 13:31:32 26 4
gpt4 key购买 nike

上一个问题:

我有一个像这样的对象依赖项。 A -> B -> C。C 有多个实现。因此,将有 A 的多个实例,这样对于 C 的每个实现 = A 实例。 A只有1个实现,显然它不是单例的。举例来说,C = 5。

当前解决方案:

我需要一个依赖关系图来定义 5 个 bean,每个 bean 都是 A 类型。这是使用 spring 和基于 xml 的配置完成的。 A 将有 5 个 bean 定义,每个 C 实现将有 5 个 bean 定义。每个 A bean defs 都会将其自己独特的 C 实现引用为 bean。

我正在使用 SOLID OOP 方法,该方法涉及编写更多平均约 50-150 行的类。我首先使用关注点分离。然后,我使用依赖倒置关联这些类。这创建了对象的关系,这当然是基于依赖关系的有向无环图。

新问题:

我之前已经在 Spring XML 配置中映射了所有这些类型的对象依赖关系。效果还不错。一个缺点是 XML 很长,看起来很重复,而且 XML 本身在表示这种关系时不太容易阅读。

我想探索仅使用配置的注释来映射这些对象关系,但我还没有看到任何允许我设置依赖关系层次结构的示例或文档。

最佳答案

使用@Qualifier注释,可以按名称注入(inject)bean,因此这样的事情是可能的:

@Configuration
public class ClassCConfig {

@Bean(name = "c1")
public C createrC1() {
returns new C();
}

@Bean(name = "c2")
public C createrC2() {
...
}

@Bean(name = "c3")
public C createrC3() {
...
}

....

然后在 A 的不同实例中注入(inject)软管:

@Configuration
public class ClassAConfig {

@Autowired
@Qualifier("c1")
private C c1;

@Autowired
@Qualifier("c2")
private C c2;

...

@Bean(name = "a1")
public A createA1() {
...
}

@Bean(name = "a2")
public A createA2() {
...
}

有了这个,就可以仅使用 Java(扫描)配置来连接任何 Bean 树。

关于java - 是否可以通过Spring组件扫描来声明复杂的类依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21536240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com