Spring中有个自动装配的功能
可以按照名称和类型来装配
请问  它是怎么实现的呢?
其实就是如何找到一个接口的实现类呢?
就好像eclipse里的Ctrl+T的功能一样
又谁读过源码的来讲一讲啊
多谢

解决方案 »

  1.   

    是不是说的,spring容器自动注入?spring的注入,应用的是反射原理.
      

  2.   

    在beans里添加default-autowire="byName"是根据名字自动装配
    default-autowire="byType"是根据类型自动装配
    如何找到一个接口的实现类?
    在配置文件中声明一个接口实现类,程序中的接口的变量名和配置文件中的接口实现类的id相同,并提供get/set方法,就可以找到了
      

  3.   

    default-autowire="byType"
    这种按照类型自动装配的时候
    即使接口的变量名和实现类的beanId不同也可以找到
    要不然怎么叫做按类型装配呢
    我就向直到它怎么实现的还有eclipse的那个功能
    它怎么直到这个接口有多少个实现类的呢
      

  4.   

    通过名字匹配查找,反射生成啊。提倡使用:根据类型default-autowire="byType"的方式
      

  5.   

    楼上能说的具体点吗
    也就是说如果我的属性名  和配置文件里的beanId不一样
    那么按类型装配就会有问题是吗?其实我就是想直到这样一件事
    比如我有个接口ServiceManager
    我如何在代码里找到这个接口的所有实现类呢?
      

  6.   

    刚做了个试验这是我一个需要注入的类    @Autowired
        private TestService testService;其中testService是要Spring来注入的,TestService是一个接口
    这个接口有一个实现类,配置如下
            <bean id="testBeanService"
    class="com.huawei.mdmc.ecospace.temp.TServiceImpl">
    </bean>
    这里beanId,属性名和实现类的名字,三者没有任何规律
    Spring依然能够正确注入但是如果给TestService 再增加一个实现类TServiceImpl2
    配置如下
            <bean id="testBean2Service"
    class="com.huawei.mdmc.ecospace.temp.TServiceImpl2">
    </bean>
    这样就会抛异常:expected single matching bean but found 2: [testBeanService, testBean2Service]所以我感觉,Spring是不是遍历了所有的bean
    判断每个bean instanceof TestService 如果是就放到一个list里
    最后判断这个list的大小  如果等于1 那么就给注入
    不等于1就抛异常(要么没有  要么不止一个)不知道猜得对不对   请直到的给个解答
    3q