1.依赖注入:构造注入、setter注入、接口注入
构造注入通过构造函数,setter注入通过setter方法、接口注入需要实现一个接口
2.装配方式
xml装配和注解装配
1)Xml文件装配
使用构造注入依赖 (类中必须有有参构造方法)
<constructor-arg name=”” value=””/>
使用setter注入依赖
<property/>
①简单类型的注入
<bean id=”” class=””>
<property name=” 属性名” value=”属性值”/>
</bean>
②引用类型的注入
<bean id=”” class=””>
<property name=”属性名” ref=”引用类型实例对象的bean对象ID”>
</bean>
③引用类型的自动注入
By name 会去容器中查找 id值为book的Book实例对象装配
<bean id="" class="" autowire="byName">
By type 会去容器中找 类型为 Book的bean装配,如果有多个Book的bean则会报错
<bean id="" class="" autowire="byType">
④集合的注入
List,Map,Set,Array等
List通过<list>和<value>标签
<property name=”list”>
<list>
<value>数值</value>
</list>
</property>
Map通过<entry>和<map>标签
<map>
<entry key=”keyone” value=”valueone”/>
</map>
当为引用类型的集合时,采用ref标签
......
2)注解装配
通过构造器来注入;通过setter方法来注入;通过filed变量来注入;
①简单类型的注入
@Value 注入int、String等基本数据类型,只能标注在成员变量、setter方法上。
②引用类型的注入
@Autowired 按类型自动装配,可标注在成员变量(不推荐)、构造方法、setter方法上。
@Qualifier 按名称自动装配,需要和@Autowired搭配使用,标注在成员变量(不推荐)、setter方法上。
引用类型byName注入@Autowired(required=false/true) 和 @Qualifier(“”)联合使用
@Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止 程 序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null。
@Resource
按名称或类型自动装配,需要 javax.annotation.jar 的支持,只能标注在成员变量、setter方法上。
JDK的Resource注解
@Resource
@Resource有type和name属性
@Resource(name=””) @Resource(type=””)
<1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
<2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
<3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
<4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;