依赖注入
依赖:指Bean对象的创建依赖于容器。Bean对象的依赖资源
注入:指Bean对象所依赖的资源,由容器来设置和装配方法
依赖注入分为构造器注入和Set注入
构造器注入
无参数构造注入方式:
<bean id="xx" class="xx">
<property name="属性名" value="属性值"/>
</bean>
有参构造的三种注入方式:
1. <bean id="xx" class="xx">
<!--index指参数下标,从0开始-->
<constructor-arg index="x" vlue="属性值"/>
</bean>
2. <bean id="xx" class="xx">
<!--name指参数名-->
<constructor-arg name="x" vlue="属性值"/>
</bean>
3. <bean id="xx" class="xx">
<!--type指参数类型-->
<constructor-arg type="java.lang.String" vlue="属性值"/>
</bean>
Set注入类型
- 常量注入
<bean id="xx" class="xx">
<property name="属性名" value="属性值"/>
</bean>
- Bean注入
<bean id="xx" class="xx">
<property name="属性名" ref="bean的id"/>
</bean>
- 数组注入
<bean id="xx" class="xx">
<property name="属性名">
<array>
<value>属性值</value>
<value>属性值</value>
<value>属性值</value>
</array>
</property>
</bean>
- List注入
<bean id="xx" class="xx">
<property name="属性名">
<list>
<value>属性值</value>
<value>属性值</value>
<value>属性值</value>
</list>
</property>
</bean>
- Map注入
<bean id="xx" class="xx">
<property name="属性名">
<map>
<entry key="键值" value="属性值"/>
<entry key="键值" value="属性值"/>
</map>
</property>
</bean>
- Set注入
<bean id="xx" class="xx">
<property name="属性名">
<set>
<value>属性值</value>
<value>属性值</value>
<value>属性值</value>
</set>
</property>
</bean>
- Null注入
<bean id="xx" class="xx">
<property name="属性名"><null/></property>
</bean>
- Properties注入
<bean id="xx" class="xx">
<property name="属性名">
<props>
<prop key="键值">属性值</prop>
<prop key="键值">属性值</prop>
<prop key="键值">属性值</prop>
</props>
</property>
</bean>
自动装配
自动装配是使用spring满足bean依赖的一种方法
spring会在应用上下文中为某个bean寻找其依赖的bean
- autowire byName(按名称自动装配)
修改bean配置,增加属性autowire=“byName”
增加该属性后,如果该bean类中有其它bean注入,可以通过Set方法自动注入,不用在手动注入。
<bean id="xx" class="xx" autowire="byName">
<property name="属性名" value="属性值"/>
</bean>
<!--只要在class类中存在与属性名相同的set方法,两段xml配置的作用是相同的-->
<!--如果class类中没有set方法,或者名字不对应就会出现空指针异常-->
<bean id="xx" class="xx">
<property name="属性名" value="属性值"/>
<property name="属性名" ref="xxx"/>
</bean>
- autowire byType(按类型自动装配)
修改bean配置,增加属性autowire=“byType”
使用autowire=“byType”的时候一定要保证同一类型的对象在spring容器中唯一。
<bean id="a" class="A">
<property name="属性名" value="属性值"/>
<property name="属性名" ref="bean的id"/>
</bean>
<bean id="aa" class="A">
<property name="属性名" value="属性值"/>
<property name="属性名" ref="bean的id"/>
</bean>
此时向一个bean中注入类A会出现NoUniqueBeanDefinitionException异常。