Spring学习-----bean的装配(6)

来源:互联网 发布:linux zip 打包文件夹 编辑:程序博客网 时间:2024/06/16 17:10

        上一节中,我们学了继承配置和通过构造函数来装配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属性,那么所有beandefault属性值就是这个。如果没有指定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中加入另一个配置文件的路径,用","隔开。

0 0
原创粉丝点击