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

12-07-15 hellodidang
先看主要代码:

// 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);
	}
}
<p>

疑问:实例化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修改过]

1
hellodidang
2012-07-15 10:05
保存的时候,会在Service前后加多个

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

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

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

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

<<<<<谢谢板桥老师的赐教!可能我的问题提的不是很好。

在B.java中有一句:i = (Integer) a.myMethod(i, null);这个a具体是哪个对象,因为实现AInterface的类可能有多个。

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

猜你喜欢