SpringMVC Hibernate Xml

本文详细介绍了SpringMVC与Hibernate的整合配置过程,包括Spring配置文件、ApplicationContext.xml的作用,以及各层(Domain、Dao、Service、Controller)的职责。文章还涉及了XML配置逻辑,如组件扫描、数据源配置、SessionFactory设置、事务管理、AOP事务配置、Ehcache缓存和SpringMVC的配置,包括注解驱动、视图解析器、国际化以及web.xml的初始化配置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础知识:

依赖注入:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,
在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,

因此,称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。

 (1)原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。对应的情形为:Java程序
里的调用者自己创建被调用者。
 (2)进入工业社会,工厂出现。斧子不再由普通人完成,而在工厂里被生产出来,此时需要斧子的人(调用者)找到工厂,购
买斧子,无须关心斧子的制造过程。对应Java程序的简单工厂的设计模式。
 (3)进入“按需分配”社会,需要斧子的人不需要找到工厂,坐在家里发出一个简单指令:需要斧子。斧子就自然出现在他面前。

对应Spring的依赖注入。

第一种情况下,Java实例的调用者创建被调用的Java实例,必然要求被调用的Java类出现在调用者的代码里。无法实现二者之间的松耦合。第二种情况下,调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用。此时调用的代码面向接口编程,可以让调用者和被调用者解耦,这也是工厂模式大量使用的原因。但调用者需要自己定位工厂,调用者与特定工厂耦合在一起。第三种情况下,调用者无须自己定位工厂,程序运行到需要被调用者时,系统自动提供被调用者实例。事实上,调用者和被调用者都处于Spring的管理下,二者之间的依赖关系由Spring提供。


如果把类比作图纸,实例比作个体的话。

创建张三的实例的时候需要用到李四,这时候传统的做法是自己去实例话一个李四。

用了spring以后,你只要告诉spring,我需要一个李四,spring查找bean去看看李四的图纸,然后实例化一个李四交给张三。

从主动去new 对象,到变成被动注入。spring实现了控制反转。


实例化Spring容器

/装载单个配置文件实例化ApplicationContext容器

ApplicationContext cxt = new ClassPathXmlApplicationContext
("applicationContext.xml");
//装载多个配置文件实例化ApplicationContext容器
String[] configs = {"bean1.xml","bean2.xml","bean3.xml"};
ApplicationContext cxt = new ClassPathXmlApplicationContext(configs);

这样就可以通过getBean方法从ApplicationContext容器中获取装配好的Bean实例

在Java项目中通过ClassPathXmlApplicationContext类手动实例化ApplicationContext容器通常是不二之选。但对于Web项目就不行了,Web项目的启动是由相应的Web服务器负责的,因此,在Web项目中ApplicationContext容器的实例化工作最好交给Web服务器来完成。




Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的“图纸”

ApplicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。

applicationContext.xml

<?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:tx="http://www.springframework.org/schema/tx"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

这个部分根据需要改变。缺什么引入什么

Domain类 是数据库表对应的持久化类

Dao类 提供了操作Hql的方法,从而提供接口

Service 提供了hQL的具体形式和调用Dao的哪些方法,从而提供服务接口

Contorller 根据得到的请求调用相应的服务处理,制作出JSON返回

各层对象的调用完全面向接口

注解@Repository用于Dao层


所谓装配,就是配置bean,收集起来图纸并对应写好,哪个是哪个的图纸。

XML配置逻辑

1.扫描包下所有带有注解的组件,纳入bean

<context:component-scan base-package="cn.itcast.oa">

      @Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。  
      @Service 用于标注业务层组件  
      @Controller 用于标注控制层组件(如springMvc的controller,struts中的action)  

      @Repository用于标注数据访问组件,即DAO组件  

 在类的成员变量上,使用以下注解,实现属性的自动装配  
      @Autowired :按类的类型进行装配  

      @Resource:


1.如果同时指定了name和type,那么从Spring上下文中找到唯一匹配的bean进行装配  
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常   
  3.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常   
  4.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配; 


2.配置数据源 用于连接到相应的数据库

XML逻辑

1..首先加载外部文件

 <context:property-placeholder location="classpath:jdbc.properties"/> 

2.将数据源纳入bean

此部分直接拷贝:

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

destroy-method="close" p:driverClassName="${jdbc.driverClassName}"

p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" />

3.把相关的东西补齐:

外部新建一个文件jdbc.property,里面根据实际填上相应的数据库信息

jdbc.driverClassName = XXXXXX  这里填写数据库的驱动

jdbc.url=XXXX 填写数据库的地址

jdbc.username= XXXXX 填写用户名

jdbc.password=XXXX 填写密码

3.配置SessionFactory

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 

     <property name="dataSource" ref="dataSource"> //属性标签帮助注入数据源

     

<property name="packagesToScan">

<list>

         <value>com.study.domain</value>

    </list>

</property>

 //配置Hibernate

<property name="hibernateProperties">

        <props>
<prop key="hibernate.dialect">  org.hibernate.dialect.Oracle9Dialect</prop> //配置Hibernate的SQL方言类型
<prop key="hibernate.show_sql">false</prop> //控制台是否打印sql
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> //启用Cache缓存
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>

</property>

<property name="entityCacheStrategies">
<props>
            <prop key="com.gbpt.domain.User">nonstrict-read-write,freqChangeRegion</prop>
         </props>
</property>

 </bean>

EhCache是什么
    EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力;
.EhCache的使用注意点
    当用Hibernate的方式修改表数据(save,update,delete等等),这时EhCache会自动把缓存中关于此表的所有缓存全部删除掉(这样能达到同步)。但对于数据经常修改的表来说,可能就失去缓存的意义了(不能减轻数据库压力);
.EhCache使用的场合
    .比较少更新表数据
        EhCache一般要使用在比较少执行write操作的表(包括update,insert,delete等)[Hibernate的二级缓存也都是这样];
    .对并发要求不是很严格的情况

        两台机子中的缓存是不能实时同步的;


4.hibernate template是spring提供给使用者的一个便捷类,可以方便操作数据库

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"

p:sessionFactory-ref="sessionFactory" />

5.配置数据库事务 这一段照抄就行了

                    <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager"
  p:sessionFactory-ref="sessionFactory" />

6.aop

aop常用于日志或者事务

因为我们只用到事务,这里介绍事务。

aop配置

<aop:config>

切入点

<aop:pointcut id="serviceMethod"

expression="execution(* com.aut.service.*Service.*(..))" />

第一个*是指任意返回值类型

第二个*表示任意服务

第三个*表示*service下的任意class

最后二个.. 表示通配 方法可以有0个或多个参数

spring增强

<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />

advice是切面

</aop:config>

切面

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes><tx:method name="*" /></tx:attributes>
</tx:advice>

7.Ehcache缓存

 <bean id="cacheManager"
          class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
          p:configLocation="classpath:ehcache.xml"/>




SpringMVC 的配置分为两部分 application.xml 和 spring-servlet.xml
application.xml :对应的是系统级别的配置,作用范围是系统上下文。

spring-servlet.xml:对应的是 controller 级别的配置,作用范围是控制层上下文。

spring-servlet.xml

1.启动注解驱动

<mvc:annotation-driven/>

2.扫描XX包下@controller注解标记的类

<context:component-scan base-package="com.XX.XX" />

3.配置视图

 配置视图解析器

<bean id="multipartResolver"

          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property name="suffix" value=".jsp"></property>

</bean>

    MessageSource用于国际化

<bean id="messageSource"

class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename=" " />   

          

web.xml

该xml是用来初始化配置信息的

比如:Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。

加载顺序与它们在 web.xml 文件中的先后顺序无关。

ServletContext -> context-param -> listener -> filter -> servlet

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/applicationContext.xml</param-value>

</context-param>

Servlet的监听器Listener

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

servlet配置

<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>3</load-on-startup>

</servlet>

为servlet定制URL

<servlet-mapping>   
             <servlet-name>servlet1</servlet-name>   
             <url-pattern>*.do</url-pattern>   

</servlet-mapping>

  过滤器能够对目标资源的请求和相应进行截取。

<filter>
<filter-name>forumFilter</filter-name>
<filter-class>com.XX.XX.ForumFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>forumFilter</filter-name>
<url-pattern>*.html</url-pattern>

<filter-mapping>
<filter-name>forumFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

还有hibernateFilter  、encodingFilter等


欢迎页

<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值