使用标签配置
在dao层实现类里定义init初始化与destroy销毁操作 
然后需要在xml里面注册 
这时候其实只能输出init,(只调用了初始化方法,因为destroy的时候jvm已经被关闭了,spring来不及destroy,这时候需要把入口函数的类型改成ClassPathXmlApplicationContext ,然后写上关闭容器的.close() 方法) 
其实还可以替代.close() 这种暴力方法:设置一个钩子,让jvm退出之前记得让spring在钩子处关闭一下 
.close() 与 ctx.registerShutdownHook() 的区别:.close() 是暴力的,如果放在了getBean 方法上面,那就相当于加载完xml后就关闭容器,不执行getBean 及以下的方法了,就会报错,而钩子函数 ctx.registerShutdownHook() 可以随时放哪都行

由于多个bean的初始化与销毁会显得比较乱,那么spring就给了我们一套规则,让我们按照他的方法写,就不用再配置了
使用接口配置(了解)
我们在bookService里面调用一下spring给我们的两个接口:  
bean经历的阶段

依赖注入

对应的,依赖注入也就有4种类型:1,setter注入(简单类型,引用类型)2,构造器注入(简单类型,引用类型)
setter注入——引用类型

当我们需要在一个bean中传入多个类型时候,需要这么做:  
在service里面整合了2个dao层的实现方法  可以看到结果按顺序执行了

setter注入——简单类型
有时候需要传入简单类型供web使用

然后我们尝试打印一下这两个简单数据类型 
这时候,我们还需要去xml里面配置下他们的properties 
构造器注入
构造器注入莫非就是在service里面写一个构造函数 
然后再到xml里面配置: 
多参数的也很简单: 

简单类型的也很简单: 

但是如果将bean里面的2个标签的顺序反过来了,那么就会报错! 
不过,对于databaseName 这样的名字,在xml里面和Dao层实现类里面都是一样的,这说明他们的耦合度还是很高,因此需要改进:将name改成type(参数类型) 
但是这样的话无法解决两个数据类型同样的问题,怎么办?又有一个新方法,便是位置(index) 
这些都是兼容性方案,为了松耦合

依赖自动装配

首先我们建立一个使用setter注入的代码 

然后我们对xml进行改造

只要我们这儿提供了数据类型以及set方法那么就能够自动装配 
然后再运行一遍程序,发现可用,说明我们不需要自己写<property> 了
但是有种情况:当我们有同类型的进行装配时,就无法按type进行匹配了,就只能用按名称进行匹配了

集合注入
既然泛型和基本数据类型都可以注入了,那么常见的集合怎么注入呢: 现在有 数组 List Set Map Properties
我们在dao层的实现类里面已经写好了
package com.itheima.dao.impl;
import com.itheima.dao.BookDao;
import java.util.*;
public class BookDaoImpl implements BookDao {
private int[] array;
private List<String> list;
private Set<String> set;
private Map<String,String> map;
private Properties properties;
public void setArray(int[] array) {
this.array = array;
}
public void setList(List<String> list) {
this.list = list;
}
public void setSet(Set<String> set) {
this.set = set;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public void save() {
System.out.println("book dao save ...");
System.out.println("遍历数组:" + Arrays.toString(array));
System.out.println("遍历List" + list);
System.out.println("遍历Set" + set);
System.out.println("遍历Map" + map);
System.out.println("遍历Properties" + properties);
}
}
现在xml也只是把这个实现类bean化了而已 <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/> 
现在,我们配置一下xml:
<property name="array">
<array>
<value>100</value>
<value>200</value>
<value>300</value>
</array>
</property>
<property name="list">
<list>
<value>dwqod100</value>
<value>eqw20ewe0ew</value>
<value>30ewwew0</value>
</list>
</property>
<property name="set">
<set>
<value>dwqop</value>
<value>daw</value>
<value>dikw</value>
<value>dikw</value>
</set>
</property>
<property name="map">
<map>
<entry key="country" value="CHN"/>
<entry key="province" value="ZJG"/>
<entry key="city" value="HZ"/>
</map>
</property>
<property name="properties">
<props>
<prop key="country">CHN</prop>
<prop key="province">ZJG</prop>
<prop key="city">HZ</prop>
</props>
</property>
然后我们运行结果即可 
|