1、使用XML进行装配
基本结构
<beans>
<bean id="" class="">
<!-- 配置Bean及其协作者-->
<bean>
<!-- 配置更多的bean-->
</beans>
使用Import加载<beans>
<import resource="service.xml">
<import resource="resource/service.xml">
<import resource="/resource/info/service.xml">
<bean id="" class="">
<!-- 配置Bean及其协作者-->
<bean>
<!-- 配置更多的bean-->
</beans>
Bean命名:
指定一个id属性为Bean的名称,并且id在Ioc中,必须唯一。一个Bean可以有多个名称也就是id,这些id在当前ioc容器中必须唯一。
当基于xml进行配置时,XML的命名规范,id是xml规定的特殊属性,名称必须以字母开始,后面可以是数字、字母、连字符、下划线、句号、冒号等完全结束符,逗号或空格等非完全结束符是非法的。如果客户需要使用特殊符号,可以使用name属性为bean指定一个唯一id,使用name属性,可以为bean指定多个唯一id。指定多个id时,可以在name属性中使用分好、逗号、或者空格进行分割
<bean name="test,#test1;test2 test3" class="com.hema.Test">
为一个bean指定一个名称并不是必须的,如果没有指定,那么容器将为其生成一个唯一的名称。
Spring配置文件不允许出现两个相同id的bean,但是可以出现两个相同name的bean,通过getBean("beanName")获取bean将返回后面定义的bean,因为后面的bean覆盖了前面的同名的bean。
如果id和name都没有指定,Spring将为bean自动指定一个唯一标识符
<bean class="com.hema.Test">
可以通过getBean("com.hema.Test")获取其实例。
设值注入:
首先Spring通过bean的默认构造方法创建一个bean的实例,通过反射机制调用set方法来注入属性值,因此设值注入要求bean必须提供一个默认的构造方法,必须为需要注入的属性提供对应的set方法。
<bean id="animal" class="com.hema.Animal">
<property name="name"><value>dog</value><property>
</bean>
构造注入:
使用构造注入的优势在于通过构造方法强制依赖关系,有个构造方法的约束,不可能实现一个不完全或完全无法使用的bean。
在只有一个构造方法时,可以通过contructor-arg标签的声明顺序来确定入参顺序,如果有多个具有相同入参的构造方法就不行了。
<bean id="student" class="com.hema.Student">
<contructor-arg><value>hema</value></contructor-arg>
</bean>
1、按照类型匹配入参:
<bean id="china" class="com.hema.Country">
<contructor-arg type="java.lang.String"><value>中国</value></contructor-arg>
<contructor-arg type="int"><value>1949</value></contructor-arg>
</bean>
2、按照索引匹配入参:
<bean id="china" class="com.hema.Country">
<contructor-arg index="0" value="中国"></contructor-arg>
<contructor-arg index="1" value="1949"></contructor-arg>
</bean>
3、联合使用类型和索引匹配入参:
<bean id="china" class="com.hema.Country">
<contructor-arg index="0" type="java.lang.String"><value>中国</value></contructor-arg>
<contructor-arg index="1" type="int"><value>1949</value></contructor-arg>
</bean>