上一节中,我们学了继承配置和通过构造函数来装配bean,通过继承配置的方式来装配bean,可以实现子类和父类的功能。通过构造函数来装配bean,要注意的就是相应的有参构造函数要存在,当然无参的构造函数也应该存在。这一节中,我们来学习自动装配。
本文中涉及到的bean有两个,一个是Dog.java,另一个是Master.java,其中Master.java中有一个Dog属性。
有四种自动装配的类型:
1、byName 寻找和属性名相同的bean。若找不到,则装不上
2、byType 寻找和属性类型相同的bean。若找不到,则装不上,若找到多个,抛异常
3、constructor 查找和bean的构造参数一致的一个或多个bean。若找不到或者找到多个,抛异常。按照参数的类型装配
4、autodetect (3)和(2)之间选一个方式,不确定到底选择哪个
5、no:不自动装配,这是autowire的默认值。
6、default :这个需要在<beans default-autowire="指定" />
PS:不推荐使用自动装配,因为自动装配往往不能直观的看出哪些属性被配置了。
PS:如果<beans>指定了default-autowire属性,那么所有bean的default属性值就是这个。如果没有指定default-autowire属性,则default-autowire的默认值是no。
PS:如果使用自动装配同时使用手动装配,那么自动装配的属性,将被手动装配的属性覆盖。
(1)ByName
当程序执行到标注红字的时候,就会调用配置文件中的代码,实例化其中的bean对象。首先在内存中创建一个dog对象,然后创建一个master对象。master对象中有一个dog属性,此时,就会根据autowire的方式来配置这个属性,此时是“ByName”,那么程序就会根据id来查找,看是否有一个“dog”的对象,发现有,ok成功装配。这就是“ByName”的自动装配方式。当然,如果dog对象的id不是“dog”而是“cat”或是其他的名称,再次运行的话会发现程序报错。这就从侧面说明了,我们的dog对象的id不是随便取的,而是和master属性中的Dog类型的引用名称一致的。
(2)ByType
如果选择了ByType类型,那么就会根据dog所属的类来寻找对象,如果找到的不唯一,那么还是会报错的。
可以看到,此时的id是不是dog都已经无所谓了。
(3)constructor
当你选择了这种方式的时候,在master.java中必须要有一个这样的构造函数
当然,如果master中还有别的构造函数,比如说什么Master(Dog dog,String name)之类的,那就GG了。
(4)autodetect
(5)default
在beans中,我们可以用default-autowire="指定类型"的方式来设定默认的装配类型,如果没有指定的话那么就是“no”
在对象的配置中,我们也可以设置“autowire”,默认的情况下是“default”,也就是你在beans中设置的匹配类型。如果自己设置的话,那就以自己设置的为准。
-----------------------------------------------------------------------------------------------------
引入特殊的bean
有时候我们需要对数据库进行设置,大家都知道,数据库的配置信息我们一般是放在properties配置文件中的,在Spring中,有一个特殊的bean来帮助我们实现对配置文件的读取。
如果我们想引入两个配置文件的话,我们只需要在location中加入另一个配置文件的路径,用","隔开。