Java Web(4)Spring 集成,與Hibernate

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接口了。

相關文章
相關標籤/搜索