主要过程:Client——>service层——>dao层,前提已经用注解创建好对象了,现在目的要在Client中调用service接口的实现类里面的方法——>该方法是要进一步去调用dao层接口的实现类的方法(可以输出信息),期间要被注入数据的dao接口对象是空值,在该对象上面添加注解@Autowired,下面简单分析该注解如何寻找类型符合的数据注入。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------添加注解的那个成员变量:
private IAccountDao accountDao = null;
首先该注解会去bean里面找符合该接口类型的对象,直接跳过key去找value值(bean是Map结构,bean是存放创建好的对象的容器),当找到符合该接口类型(IAccountDao)的value时若有多个,就要反过来在key里面寻找,(key就是bean的id,如果是注解就是它的value值)
比如这时候找到两个该接口的实现类符合,两个类的注解分别是
@Repository("accountDao")
@Repository("accountDao2")
就是要拿这两个id来和上面成员变量的变量名来匹配,可以看出匹配到的是第一个类的注解名为accountDao,这时候选择的就是第一个类了,接着就是调用它的方法做最后的输出信息了。(如果上面变量名随便取其他的比如abc,这时候两个类注解名都不是abc,这时候就会报错找不到符合类型的实现类)下面上大图:这图居然被压扁了