您的位置:首页 > 移动开发

spring与hibernate的整合问题—Spring的配置文档applicationContext.xml

2015-10-10 23:17 741 查看
进行java EE开发最常用的就是Spring,

Spring是一种轻量级的java开发框架,是一种javaEE的容器管理工具,Spring的核心就是IoC容器,Spring利用IoC容器来注册bean,对bean的管理能够实现java对象之间的依赖关系,从而成为完成其他复杂任务的基础。Spring建立在IoC容器核心功能之上的其他重要功能有:AOP(面向切面编程),事务管理,springMVC,ORM等,这些功能都在Spring的核心配置文档applicationContext.xml中得以体现。

下面就简单总结下applicationContext.xml的最基本最简单的结构。先上代码(最精简版):

[html] view
plaincopy

<?xml version="1.0" encoding="UTF-8"?>  

<beans xmlns="http://www.springframework.org/schema/beans"  

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  

    xmlns:aop="http://www.springframework.org/schema/aop"  

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   

    http://www.springframework.org/schema/aop  

    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"  

    default-lazy-init="true" default-autowire="byName" default-init-method="" default-destroy-method="">  

    <!-- 用于读取properties文件,此处将数据库连接的用户名密码等存在jdbc.properties文件中 -->  

    <bean id="propertyConfigurer"  

        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  

        <property name="locations">  

            <list>  

                <value>WEB-INF/jdbc.properties</value>  

            </list>  

        </property>  

    </bean>  

    <!-- 配置数据库连接 -->  

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  

        destroy-method="close">  

        <property name="driverClassName" value="${jdbc.driverClassName}" />  

        <property name="url" value="${jdbc.url}" />  

        <property name="username" value="${jdbc.username}" />  

        <property name="password" value="${jdbc.password}" />  

        <property name="poolPreparedStatements" value="true" />  

        <property name="defaultAutoCommit" value="true" />  

    </bean>  

    <!-- 整合hibernate -->  

    <bean id="sessionFactory"  

        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  

        <property name="hibernateProperties">  

            <value> hibernate.dialect=${hibernate.dialect}  

                hibernate.query.substitutions=true  

                hibernate.show_sql=true  

                hibernate.hbm2ddl.auto=none  

            </value>  

        </property>  

        <!-- 持久化类,注解形式 -->  

        <property name="annotatedClasses">  

            <list>  

                <value>nju.software.xkxt.data.dataobject.UserDO</value>  

        </property>  

    </bean>  

    <!-- 事务管理  注:事实上当事务管理器名字为transactionManager时,就不需要加transaction-manager属性 -->  

    <tx:annotation-driven transaction-manager="transactionManager" />  

    <bean id="transactionManager"  

        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  

        <property name="sessionFactory" ref="sessionFactory" />  

    </bean>  

    <!-- 共用Dao -->  

    <bean id="userDao" class="nju.software.xkxt.data.dao.implement.UserDaoImpl"></bean>  

    <!-- 共用Service -->  

    <bean id="userService" class="nju.software.xkxt.service.implement.UserServiceImpl"></bean>  

</beans>  




文档中最基本的配置就是各种bean的配置,bean的配置有几个是必不可少的

1.sessionFactory

spring中ORM的配置。如果Dao层要使用hibernate,用到的hibernateTemplate,那么必须要建立sessionFactory类.sessionFactorybean是在ssh整合中hibernate托管给spring的,因此配置文档中要配置sessionFactory,并且将sessionFactory装配到相应的Dao中。由于文档beans的默认配置中有default-autowire=byName这个默认配置,因此采用自动装配的方式,通过寻找名字sessionFactory来注入到每个Dao中。sessionFactory要装配dataSource,此处也不需要手动装配,只需要在文档中定义dataSource的bean即可。

2.dataSource

配置数据库连接,要装配到sessionFactory中。要声明数据库的连接路径url,数据库用户名username,密码password等。此处defaultAutoCommit=true是设置sql语句的自动提交,即执行一条sql,都立即提交,这样很方便,但是有时候会出现问题。因此就用到事务管理,参见事务管理下文,jdbc的事务管理中要屏蔽其自动提交。还有,我们发现以上的属性url,username,password都是通过文档引入的,并不是写死在里面的,因此还需要配置一个bean就是propertyConfigurer。

3.propertyConfigurer

这个配置用于配置properties文件,主要的用处就是从properties文件中读取相应的属性和属性值到applicationContext文档(其实properties文件就是一个map,key-value键值对形式)。这样的好处是将用户名和密码等信息从applicationContext文档中抽取出来,安全而且修改方便。

4.其他的自定义的bean

在编写代码中,如果要应用spring提供的ioc的功能,就可以在applicationContext文档中配置相应的dao层和service层的bean,配置起来相当方便,例子如上图。而且用起来也很方便。

5.transactionManager

以上几类bean都是必须要配置的。如果用到事务管理的相关内容,就需要配置transactionManagerbean,因此该bean并不是必须的,只是在用到的时候才进行配置。配置也相当简单如上图。具体的spring的事务管理的介绍请参见http://blog.csdn.net/dreamrealised/article/details/9123173。在此不在赘述。

6.AOP

aop并不是必须的,什么时候用到拦截器的时候就对相应的bean进行配置,aop的介绍打算从新写一篇博文来介绍。

7.spring MVC

spring MVC请参见后续博文。

最后,beans的属性中有一个属性default-lazy-init,这个属性是用来设置bean的延迟实例化的,默认的值为false。如果default-lazy-init=true,则说明该bean在ApplicationContext实现在初始化时被提前实例化。如果设为false,bean将告诉IoC容器在ApplicationContext启动时不进行实例化,而是在第一次被用到时才实例化。

另外bean的init-method属性(beans的default-init-method)指定bean初始化时执行的方法;bean的distory-method属性(default-destroy-method)指定bean销毁时执行的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: