是否可以通过Spring Component扫描声明复杂的类依赖?

时间:2014-02-03 19:41:23

标签: java spring oop spring-annotations solid-principles

以前的问题:

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

当前解决方案:

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

我使用的是SOLID OOP方法,平均每天写入大约50-150行的类。我首先使用关注点分离。然后,我使用依赖性反转关联这些类。这会创建一个对象关系,当然这是一个基于依赖关系的有向非循环图。

新问题:

我在spring XML配置之前已经映射了所有这些类型的对象依赖关系。它的效果还不错。一个缺点是XML冗长,似乎是重复的,当表示这种关系时,XML本身并不容易阅读。

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

1 个答案:

答案 0 :(得分:1)

使用@Qualifier注释,可以按名称注入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:

实例中注入软管
@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树。