- 通过 XML 文件用 bean 节点来配置 。
- 注入方式有三种:属性注入,构造器注入,工厂方法注入(很少使用)
属性注入
该配置方法算是最基本的 Spring 的配置。也就是“属性注入”
- id:表示 bean 的名称,在 ctx.getBean(“#id”) 的时候可以获取 bean
- class:没啥好说的
- property:属性注入使用 元素,name 属性指定 Bean 的属性名称,value 属性或者 子节点指定属性值
- 原理:通过 setter 方法来注入
<bean id="helloSpring" class="com.free.spring.beans.HelloSpring">
<property name="name" value="Spring"></property>
</bean>
构造器注入
- 通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。
- 构造器注入在 元素里声明属性, 中没有 name 属性
构造器注入分两种:按类型匹配入参、按索引匹配入参
- 按类型匹配入参
<bean id="car2" class="com.free.spring.beans.Car">
<constructor-arg value="Audi" type="java.lang.String"></constructor-arg>
<constructor-arg value="1111" type="java.lang.Integer"></constructor-arg>
<constructor-arg value="cas" type="java.lang.String"></constructor-arg>
</bean>
- 按索引匹配入参
<bean id="car" class="com.free.spring.beans.Car">
<constructor-arg value="Audi" type="java.lang.String" index="0"></constructor-arg>
<constructor-arg type="java.lang.String" index="1">
<value><![CDATA[<Shanghai>]]></value>
</constructor-arg>
<constructor-arg value="1234.00" type="double" index="2"></constructor-arg>
</bean>
- 基本数据类型、String 类型,也叫做字面值,都可以通过 value 属性进行注入
- 如果字面值中包含特殊字符,可以使用
<![CDATA[]]>
把字面值包裹起来。
引用其他的 bean
- 通过 元素 或者 ref 属性为 bean 的属性或构造器参数指定对 bean 的引用
<bean id="person4" class="com.free.spring.beans.collection.Person">
<property name="car" ref="cars"></property>
</bean>
- 内部 bean
当 Bean 实例仅仅给一个特定的属性使用时,用到内部 bean,但是不能用在其他任何地方
<bean id="personX" class="com.free.spring.beans.collection.Person">
<property name="name" value="Alex"></property>
<property name="age" value="20"></property>
<property name="car">
<bean class="com.free.spring.beans.Car">
<constructor-arg value="20" type="java.lang.Integer"></constructor-arg>
<constructor-arg value="OOOO" type="java.lang.String"></constructor-arg>
<constructor-arg value="aaaa" type="java.lang.String"></constructor-arg>
</bean>
</property>
</bean>