1. 在數據庫持久層的hibernate弄好後,接下來使用spring 來託管Hibernate的SessionFactory。
java
爲何要這麼作呢?對於我來講也是一個很模糊的概念。
mysql
前面已經使用單例模式來加載Hibernate,確保SessionFactory的構造只進行一次,由於SessionFactory的初始化是一個很複雜的過程,生成的代價比生成一個Session的代價要巨大不少。
web
而後咱們經過對HibernateUtil工具類來把SessionFactory來傳進到Dao代碼中,這是要手動管理的。
spring
按照Spring的說法就是,能夠經過spring來使得接口與實現類的鬆散耦合,而Spring 經過依賴注入來達到這種鬆散耦合的效果。
sql
這是如今初步學習的感覺,後期的深刻學習後再來具體感覺一下。
數據庫
2. 廢話很少說,下面來把Spring加入到項目中。session
首先在maven中的pom.xml的dependencies節點加入dependency子節點添加類庫的依賴
app
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring.orm</artifactId> <version>4.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.2.RELEASE</version> </dependency>
這裏添加的類庫有三個,一個是spring的框架類,另外一個是ORM的類庫,使得spring能集成hibernate的核心代碼,還有一個就是web的依賴類庫。
框架
3. 接下來要作的就是編寫spring的xml配置文件。下面示例模板maven
<?xml version="1.0" encoding="GBK"?> <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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--這裏是啓用spring註解--> <context:annotation-config/> <!--這裏是註冊bean,託管於spring容器管理。這是數據庫鏈接配置--> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://127.0.0.1:3306/tian"></property> <property name="username" value="tian"></property> <property name="password" value="tian8169"></property> </bean> <!--在這裏把hibernate註冊到spring中,讓spring來初始化SessionFactory--> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> <property name="dataSource" ref="dataSource"></property> </bean> <bean id="userDaoImpl" class="cn.tian.dao.UserDaoImpl"></bean> </beans>
把這個xml放到WebContent下的WEB-INF目錄下,spring就會自動找到這一份xml配置,固然,須要把這個文件命名爲applicationContext.xml。具體的參考文檔在這裏
org.springframework.web.context.ContextLoader
的註釋中找到。
那若是我不想放在默認的路徑下,我把放到classpath下要怎麼辦呢?
其實在ContextLoader中的註釋中也講到了,只要在web.xml中添加一個<context-param>就能夠自定義配置的路徑以及文件名。一樣,咱們也須要在web.xml添加一個監聽器listener來啓動spring
<!--其中前綴classpath:是指明這個配置文件在源碼根目錄下,若是是file:則是物理路徑--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!--spring啓動--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--啓動spring日誌服務,加載log4j.properties--> <listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener>
4. 而後,就只須要在UserDaoImpl中添加一個@AutoWired就OK了,代碼以下
package cn.tian.dao; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; //導入註解 import org.springframework.beans.factory.annotation.Autowired; import cn.tian.vo.User; public class UserDaoImpl implements UserDao{ private SessionFactory factory; //此處註解 @AutoWired public RoleDaoImpl(SessionFactory sessionFactory){ this.factory = sessionFactory; } /* 數據庫相關操做代碼,省略 */ }
5. 固然,咱們還須要在spring的applicationContext.xml中添加<bean></bean>來告訴這裏有這麼一個bean須要你來管理。而後就能夠直接使用UserDao接口了。