携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
继续上一篇文章的内容,上一篇文章介绍的是xml 文件中autowire 的相关内容,这里我们继续。
byType 的注意事项
在使用byType 的时候,如果其容器中管理的所有bean 定义中可以找到被依赖的bean 的定义,那么容器就会将找到的bean 绑定到需要依赖的实例对象中去;
而如果没有找到,那么就不做设置;
如果找到了多个相同类型的bean,那么系统就会直接报错,告诉使用者它不知道应该选用哪一个,所以需要开发人员自行查阅原因,或者明确指出使用哪一个类。
所以说,byType 只能保证,当容器中仅仅存在一个符合要求类型的被依赖的对象的时候才会发挥出其最大的价值;如果容器中存在多个相同类型的bean 的定义,那么就需要手动指定使用哪个类,这样就会比较繁琐了。
constructor
对于上面讲的byName 和byType 两种自动绑定模式,它们其实是针对property 的自动绑定。
constructor 类型的自动绑定模式则是针对构造方法的参数的类型进行的自动绑定。但是constructor 使用的是byType 类型的,它匹配的是构造方法的参数类型,不是实例属性的类型。(区别举例来说是父类、子类类型关系)
使用constructor 的时候,也要注意byType 的注意事项,即如果容器中找不到一个符合条件的类型,那么容器就会抛出异常。
在使用上,constructor 与byType 也没有多大的区别,区别就是在使用constructor 的时候,需要将对应的配置应用到使用构造方法注入的bean 的定义之上才可以。
总结
这篇文章总结了使用byType 的时候的注意事项,同时讲述了constructor 的使用方法。后续文章继续介绍另外两种自动装配类型。