求教:注入的具体实现类是哪一个?

先看主要代码:


// SampleAppTest.java
public void testGet[author]Service[/author]() {
BInterface b = (BInterface) appUtil.get[author]Service[/author](
"b");
Assert.assertEquals(b.bMethod(1), 10);
}

//B.java
@[author]Service[/author](
"b")
public class B implements BInterface {
AInterface a;
DInterface d;

public B(AInterface a, DInterface d) {
this.a = a;
this.d = d;
}

public int bMethod(int i) {
System.out.println(
"call A.myMethod1 ");
i++;
i = (Integer) a.myMethod(i, null);
System.out.print(
"\n\n call A.myMethod1 result=" + i + " \n\n");

i++;
System.out.println(
"call A.myMethod2 ");
i = (Integer) a.myMethod2(i);
System.out.print(
"\n\n call A.myMethod2 result=" + i + "\n\n");

i++;
return (Integer) d.myMethod3(i);
}
}

疑问:实例化B时,会自动注入AInterface、DInterface,但框架是怎么知道具体注入哪个实现类,从哪里体现出来?求教,谢谢!!!


[该贴被hellodidang于2012-07-15 09:59修改过]
[该贴被hellodidang于2012-07-15 10:02修改过]
[该贴被hellodidang于2012-07-15 10:02修改过]
[该贴被hellodidang于2012-07-15 10:03修改过]

保存的时候,会在Service前后加多个


[author][/author]
,修改了好几次都这样,这又为什么呢?



[该贴被hellodidang于2012-07-15 10:07修改过]

根据接口类型寻找,然后使用JDK的构造器反射java.lang.reflect.Constructor创建对象。

2012-07-15 10:13 "@banq"的内容
根据接口类型寻找,然后使用JDK的构造器反射java.lang.reflect.Constructor创建对象。 ...

<<<<<谢谢板桥老师的赐教!可能我的问题提的不是很好。
在B.java中有一句:i = (Integer) a.myMethod(i, null);这个a具体是哪个对象,因为实现AInterface的类可能有多个。

如果没有指定候选,就选择第一个发现的,所以同一个接口不能有两个以上实现,如果有,必须指定候选,不过jdon不支持候选,因此只能是一个实现。