10.3.3 部署DAO组件

10.3.3 部署DAO组件

对于所有继承BaseDaoHibernate4DAO实现类必须为其提供SessionFactory的引用,SpringIoC容器可以将SessionFactory注入到DAO组件中。
下面是在本系统中部署DAO组件的配置代码,本系统以单独配置文件来部署DAO组件,这样可以将不同组件放在不同配置文件中分开管理,从而避免Spring 配置文件过于庞大。下面是部署DAO组件的配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?xml version="1.0" encoding="utf-8"?>
<!-- Spring配置文件的根元素,并指定Schema信息 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 定义数据源Bean,使用C3P0数据源实现 -->
<!-- 注意修改这里的数据库密码 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://localhost:3306/auction"
p:user="root"
p:password="root"
p:maxPoolSize="200"
p:minPoolSize="2"
p:initialPoolSize="2"
p:maxIdleTime="2000"
destroy-method="close"/>
<!-- 定义Hibernate的SessionFactory
并为它注入数据源,设置Hibernate配置属性等。-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
p:dataSource-ref="dataSource">
<property name="annotatedClasses">
<list>
<value>org.crazyit.auction.domain.AuctionUser</value>
<value>org.crazyit.auction.domain.Bid</value>
<value>org.crazyit.auction.domain.Item</value>
<value>org.crazyit.auction.domain.Kind</value>
<value>org.crazyit.auction.domain.State</value>
</list>
</property>
<!-- 定义Hibernate的SessionFactory的属性 -->
<property name="hibernateProperties">
<props>
<!-- 指定数据库方言 -->
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<!-- 显示Hibernate持久化操作所生成的SQL -->
<prop key="hibernate.show_sql">true</prop>
<!-- 将SQL脚本进行格式化后再输出 -->
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>

<!-- 配置daoTemplate,作为所有DAO组件的模板,
为DAO组件注入SessionFactory引用 -->
<!-- 1号代码 -->
<bean id="daoTemplate"
abstract="true"
p:sessionFactory-ref="sessionFactory" />
<!-- 配置stateDao组件 -->
<bean id="stateDao"
parent="daoTemplate"
class="org.crazyit.auction.dao.impl.StateDaoHibernate" />
<!-- 配置kindDao组件 -->
<bean id="kindDao"
parent="daoTemplate"
class="org.crazyit.auction.dao.impl.KindDaoHibernate" />
<!-- 配置auctionDao组件 -->
<bean id="auctionUserDao"
parent="daoTemplate"
class="org.crazyit.auction.dao.impl.AuctionUserDaoHibernate" />
<!-- 配置bidDao组件 -->
<bean id="bidDao"
parent="daoTemplate"
class="org.crazyit.auction.dao.impl.BidDaoHibernate" />
<!-- 配置itemDao组件 -->
<bean id="itemDao"
parent="daoTemplate"
class="org.crazyit.auction.dao.impl.ItemDaoHibernate" />
</beans>

这里在粗体字代码中配置了一个daoTemplate抽象Bean,它将作为系统中其他DAO组件的模板,这样就可将daoTemplate的配置属性传递给其他DAO Bean
为了让其他DAO组件获得daoTemplate 的配置属性,必须将其他DAO 组件配置成daoTemplate的子Bean,子Bean通过parent属性指定其父Bean,正如在上面的配置文件中,在每个DAO Bean的粗体字代码中都指定了parent="daoTemplate",这表明这些DAO组件将以daoTemplate作为模板。