Java 是否可以通过Spring组件扫描来声明复杂的类依赖关系?
以前的问题: 我有这样的对象依赖关系。A->B->C。C有多个实现。因此,A将有多个实例,这样对于C=A实例的每个实现。A的实现只有1个,显然不是单例的。举例来说,C=5 当前解决方案: 我需要一个依赖关系映射来定义5个bean,每种类型都是a。这是使用spring和基于xml的配置完成的。对于A,将有5个bean def,对于每个C实现,将有5个bean def。每个bean def都将自己独特的C实现称为bean 我使用的是solidoop方法,它包括编写更多的类,平均大约50-150行。我首先使用关注点分离。然后,我使用依赖项反转将这些类关联起来。这将创建一个对象的关系,这当然是一个基于依赖关系的有向无环图 新问题: 我以前在SpringXML配置中映射过所有这些类型的对象依赖关系。结果很好。一个缺点是XML很长,似乎是重复的,而且XML本身在表示这种关系时不太容易阅读Java 是否可以通过Spring组件扫描来声明复杂的类依赖关系?,java,spring,oop,spring-annotations,solid-principles,Java,Spring,Oop,Spring Annotations,Solid Principles,以前的问题: 我有这样的对象依赖关系。A->B->C。C有多个实现。因此,A将有多个实例,这样对于C=A实例的每个实现。A的实现只有1个,显然不是单例的。举例来说,C=5 当前解决方案: 我需要一个依赖关系映射来定义5个bean,每种类型都是a。这是使用spring和基于xml的配置完成的。对于A,将有5个bean def,对于每个C实现,将有5个bean def。每个bean def都将自己独特的C实现称为bean 我使用的是solidoop方法,它包括编写更多的类,平均大约50-150行。我
我想只使用配置的注释来探索映射这些对象关系,但我还没有看到任何示例或文档允许我设置依赖关系层次结构。使用
@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() {
...
}
....
然后将软管注射到不同的情况下:
@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树。您在哪里寻找的配置是下面的吗?我想是的。。。当我有机会尝试时,我一定会更新问题。谢谢@jhaddesdev我已经试过了,但是有一个问题。JavaConfig类中的自动连线bean为空。例如:
c1
是自动连接的。它在createA1()
中被引用。不幸的是,在运行@Bean
方法createA1()
之前,c1
不是自动连接的。因此,c1
为空。基本上,我无法将bean自动连接到配置类中。啊,我犯了一个错误。我在配置中为C创建Bean,它是自动连接的。它是自动连线的,但我试图访问它的范围都错了。我现在明白了。