聚集:如果两个对象具有各自的生命周期并且彼此之间不紧密耦合(可以独立存在)。
Class A {
B b;
}
b
的默认值为null
,如果A中没有注入实例,则A's
对象可以存在。
组成:如果两个对象紧密耦合且一个对象不能不存在就不能存在。
Class A{
B b;
A(B b){
this.b = b;
}
}
春季DI:在春季,如果我们在某个成员上使用@Autowired
批注,那么在实例化对象之前,需要该成员。
Class A{
@Autowired */ now this member is required before creating of object of A.
B b;
}
查询:因此,根据以上事实,我们可以将Spring DI
视为此处的组成。我之所以要问这个问题,是因为在一次采访中,我根据采访者进行了讨论。 Spring
在这里使用Aggregation
。
任何人都可以请问我是否在这里想念还是找不到东西。
答案 0 :(得分:0)
我认为这取决于B范围。如果B是单调的,则B管理其生命周期,因此A和B之间的关系是聚合。 如果B不是单调(原型),则每次A创建B的新实例时,都会创建该B实例并将其注入A中,并且A会管理B的生命周期,因此在这种情况下A与B之间的关系将为Composition
答案 1 :(得分:0)
我认为,Spring
中的Autowire
在类彼此服务时意味着更多Aggregation
。
例如在Service层的MVC
设计模式中。您可能有两个相互服务的Service类。例如Teacher
教学生,Student
向老师学习。要实现这样的示例,您应该有以下两个类:
Class Teacher(){
public void teach(Lesson lesson,Student student){
//...
}
}
Class Student(){
@Autowire
private ITeacher iTeacher;
public void learn(Lesson lesson){
iTeacher.teach(lesson,this);
//...
}
}
您看到Student
取决于interface
中的Teacher
。和Spring
选择Interface
的哪个实现进行注入。从这个角度来看,bean没有耦合在一起,您可以删除实现并将其替换为另一个实现。