在前面对IoC容器实现原理的分析中直是通过 Bean Definition的属性值和构造函数以显式的方式对Bean的依赖关系进行管理的。在 Spring中,相对这种显式的依赖管理方式IoC容器还提供了自动依赖装配的方式,为应用使用容器提供更大的方便。在自动装配中,不需要对Bean属性做显式的依赖关系声明,只需要配置好 autowiring属性,IoC容器会根据这个属性的配置,使用反射自动查找属性的类型或者名字,然后基于属性的类型或名字来自动匹配oC容器中的Bean,从而自动地完成依赖注入。
这是一个很有诱惑力的功能特性,使用它可以完成依赖关系管理的自动化,但是使用时定要注意,计算机只是在自动执行,它是不会思考的。使用这个特性的优点是能够减少用户配置Bean的工作量,但它是一把双刃剑,如果使用不当,也会为应用带来不可预见的后果调方所以,使用时需要多一些小心和谨慎。
从 autowiring使用上可以知道,这个 autowiring属性在对Bean属性进行依赖注入时起作用ax:对Bean属性依赖注入的实现原理,在前面已经做过分析。回顾那部分内容,不难发现,对autowirng属性进行处理,从而完成对Bean属性的自动依赖装配,是在 populate Bean中实现的节选 AbstractAutowire Capable Bean Factory的 populate Bean方法中与autowiring实现相关的部行体次分,可以清楚地看到这个特性在容器中实现的入口。也就是说,对属性 autowiring的处理是populateBean处理过程的一个部分。在 populate Bean的实现中,在处理一般的Bean之前,先对 autowiring属性进行处理。如果当前的Bean配置了 autowire_by_name和 autowire_by_type属性,那么调用相应的 autowireByName方法和 autowire ByType方法。这两个方法很巧妙地应用1C容器的特性。例如,对于 autowire_ by_name,它首先通过反射机制从当前Bean中得到需要注入的属性名,然后使用这个属性名向容器申请与之同名的Bean,这样实际又触发了另Bean的生成和依赖注入的过程。
咨询热线
010-85377344
135-21581588
微信客服
QQ客服
3026106565 点击咨询