转自:http://blog.csdn.net/heng_ji/article/details/7022171,写的很好,省得以后找,放此处

想必用过Spring的程序员们都有这样的感觉,Spring把逻辑层封装的太完美了(个人感觉View层封装的不是很好)。以至于有的初学者都不知道Spring配置文件的意思,就拿来用了。所以今天我给大家详细解释一下Spring的applicationContext.xml文件。Ok,还是通过代码加注释的方式为大家演示:

以下是详解Spring的applicationContext.xml文件代码:
<!-- 头文件,主要注意一下编码 -->

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>

<!-- 建立数据源 -->

[html] view plaincopyprint?

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

  <!-- 数据库驱动,我这里使用的是Mysql数据库 -->

[html] view plaincopyprint?

  1. <propertynamepropertyname="driverClassName">
  2. <value>com.mysql.jdbc.Driver</value>
  3. </property>

  <!-- 数据库地址,这里也要注意一下编码,不然乱码可是很郁闷的哦! -->

[html] view plaincopyprint?

  1. <property name="url">
  2. <value>
  3.       jdbc:mysql://localhost:3306/tie?useUnicode=true&characterEncoding=utf-8 
  4. </value>
  5. </property>

  <!-- 数据库的用户名 -->

[html] view plaincopyprint?

  1. <property name="username">
  2. <value>root</value>
  3. </property>

  <!-- 数据库的密码 -->

[html] view plaincopyprint?

  1. <property name="password">
  2. <value>123</value>
  3. </property>
  4. </bean>

<!-- 把数据源注入给Session工厂 -->

[html] view plaincopyprint?

  1. <bean id="sessionFactory"
  2. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <property name="dataSource">
  4. <ref bean="dataSource" />
  5. </property>

  <!-- 配置映射文件 -->

[html] view plaincopyprint?

  1. <property name="mappingResources">
  2. <list>
  3. <value>com/alonely/vo/User.hbm.xml</value>
  4. </list>
  5. </property>
  6. </bean>

<!-- 把Session工厂注入给hibernateTemplate -->
<!-- 解释一下hibernateTemplate:hibernateTemplate提供了很多方便的方法,在执行时自动建立 HibernateCallback 对象,例如:load()、get()、save、delete()等方法。 -->

[html] view plaincopyprint?

  1. <bean id="hibernateTemplate"
  2. class="org.springframework.orm.hibernate3.HibernateTemplate">
  3. <constructor-arg>
  4. <ref local="sessionFactory" />
  5. </constructor-arg>
  6. </bean>

<!-- 把DAO注入给Session工厂 -->

[html] view plaincopyprint?

  1. <bean id="userDAO" class="com.alonely.dao.UserDAO">
  2. <property name="sessionFactory">
  3. <ref bean="sessionFactory" />
  4. </property>
  5. </bean>

<!-- 把Service注入给DAO -->

[html] view plaincopyprint?

  1. <bean id="userService"class="com.alonely.service.UserService">
  2. <property name="userDAO">
  3. <ref local="userDAO" />
  4. </property>
  5. </bean>

<!-- 把Action注入给Service -->

[html] view plaincopyprint?

  1. <bean name="/user"class="com.alonely.struts.action.UserAction">
  2. <property name="userService">
  3. <ref bean="userService" />
  4. </property>
  5. </bean>
  6. </beans>

以上Spring的applicationContext.xml文件我是用的SSH架构,如果您用Spring的MVC架构,其原理也是一样的。

对里面的一些概念还不熟悉,一个字"晕"啊,在网上搜搜资料,解释一下applicationcontext.xml

我们以项目中的订单Order为例简要说明一下Spring与Hibernate的集成。关于如何使用Hibernate来对数据库表做映射,我们在前面已经做了介绍,这里我们关心的是如何配置Spring,使它能管理Hibernate。其实,只要在Spring的配置文件(我们这里是applicationContext.xml)中配置一个叫做sessionFactory的bean,Spring就可以和Hibernate联系起来了。

[html] view plaincopyprint?

  1. <beanidbeanid="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  2. <property name="configLocation">
  3. <value>com/ascent/bean/hibernate.cfg.xml</value>
  4. </property>
  5. </bean>

这样,Spring和Hibernate的第一步整合就完成了,现在到了关键的地方——如何让Spring和Hibernate双剑合璧来实现业务逻辑?

还是在applicationContext.xml文件中先做一个配置。

[html] view plaincopyprint?

  1. <beanidbeanid="transactionManager"class="org.springframework.orm.hibernate.HibernateTransactionManager">
  2. <property name="sessionFactory">
  3. <ref local="sessionFactory"/>
  4. </property>
  5. </bean>

在上面你大概可以感觉到Spring给我们带来的好处了,Spring的IoC模式可以统一管理各层,而又使各层松散耦合在一起,使各层之间实现最大的解耦性,这也是Web架构一向的追求。

但是,Spring带来的好处还不止于此,除了IoC还有AOP,Spring可以运用AOP来实现很多功能,最常用的就是事务处理。这里我们用了业务服务(business service)层和数据存取对象(Data Access Object)层,在业务服务层我们增加事务处理,数据存取对象层负责数据读写。

首先,组装配置好Service Beans。

[html] view plaincopyprint?

  1. <beanidbeanid="orderService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  2. <property name="transactionManager">
  3. <ref local="transactionManager"/>
  4. </property>
  5. <property name="target">
  6. <ref local="orderTarget"/>
  7. </property>
  8. <property name="transactionAttributes">
  9. <props>
  10. <propkeypropkey="find*">PROPAGATION_REQUIRED,readOnly,-OrderException</prop>
  11. <propkeypropkey="save*">PROPAGATION_REQUIRED,-OrderException,-OrderMinimumAmountException</prop>
  12. </props>
  13. </property>
  14. </bean>

之后,需要把业务服务对象和数据存取对象也组装起来,并把这些对象配到一个事务管理器(transaction manager)里。

在Spring中的配置信息。

[html] view plaincopyprint?

  1. <beanidbeanid="orderTarget"class="com.ascent.business.service.OrderServiceImpl">
  2. <property name="orderDAO">
  3. <ref local="orderDAO"/>
  4. </property>
  5. </bean>
  6. <beanidbeanid="orderDAO"class="com.ascent.dao.hibernate.OrderHibernateDAO">
  7. <property name="sessionFactory">
  8. <ref local="sessionFactory"/>
  9. </property>
  10. </bean>

每个对象都联系着Spring,并且能通过Spring注入到其他对象。把它与Spring的配置文件比较,观察他们之间的关系。

Spring就是这样基于配置文件,将各个Bean搭建在一起的。

这里我们使用一个TransactionProxyFactoryBean,它定义了一个setTransactionManager(),这个对象很有用,它能很方便地处理你申明的Service Object中的事物,你可以通过transaction Attributes属性来定义怎样处理。

TransactionProxyFactoryBean还有个setter,这会被业务服务对象(orderTarget)引用,orderTarget定义了业务服务层,并且它还有个属性,由setOrderDAO()引用这个属性。

还有一点要注意,bean可以用两种方式创造,这些都在单例模式(Sington)和原型模式(propotype)中定义了。默认的方式是singleton,这意味着共享的实例将被束缚,而原型模式是在Spring用到bean的时候允许新建实例的。当每个用户需要得到他们自己Bean的Copy时,你应该仅使用prototype模式。

这样,Spring和Hibernate就完成了对业务对象的管理。

applicationContext.xml详解(转)的更多相关文章

  1. applicationContext.xml详解 spring+mybatis+struts

    今天给大家详细解释一项关于Spring的applicationContext.xml文件,这对于初学者来说,应该是很有帮助的, 以下是详解Spring的applicationContext.xml文件 ...

  2. spring applicationContext.xml详解及模板

    applicationContext.xml 文件   1.<context:component-scan base-package="com.eduoinfo.finances.ba ...

  3. Spring中applicationContext.xml详解

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  4. applicationContext.xml详解

    http://blog.csdn.net/heng_ji/article/details/7022171

  5. Web.xml详解(转)

    这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一.            Web.xml详解: (一)  web.xml加载过程(步骤) 首 ...

  6. Maven-pom.xml详解

    (看的比较累,可以直接看最后面有针对整个pom.xml的注解) pom的作用 pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵 ...

  7. 【maven】 pom.xml详解

    pom.xml详解 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  8. build.xml详解

    build.xml详解1.<project>标签每个构建文件对应一个项目.<project>标签时构建文件的根标签.它可以有多个内在属性,就如代码中所示,其各个属性的含义分别如 ...

  9. 【转】maven核心,pom.xml详解

    感谢如下博主: http://www.cnblogs.com/qq78292959/p/3711501.html maven核心,pom.xml详解 什么是pom?    pom作为项目对象模型.通过 ...

随机推荐

  1. [Python]Pip的安装以及简单的使用

    Pip的安装 安装python以后(我的python版本是32位,版本号2.7.10),如果需要安装一些其他的库,一般有两种办法,一种是自己手动去各个库的官网下载,自己安装:另一种方法是安装pip,使 ...

  2. hdu 4620 搜索

    好苦逼,为啥数组开小了,不会runtime error,还得我WA了几个小时,我泪流满面. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4620 #i ...

  3. Treasure Hunt - POJ 1066(线段相交判断)

    题目大意:在一个正方形的迷宫里有一些交错墙,墙的两端都在迷宫的边缘墙上面,现在得知迷宫的某个位置有一个宝藏,所以需要砸开墙来获取宝藏(只能砸一段墙的中点),问最少要砸开几面墙.   分析:这个题意刚开 ...

  4. 1242Rescue (优先队列BFS)

    Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...

  5. 417. Pacific Atlantic Water Flow

    正常做的,用了645MS..感觉DFS的时候剪枝有问题.. 为了剪枝可能需要标记一个点的4种情况: 1:滨临大西洋,所有太平洋来的点可以通过: 2:濒临太平洋,所有大西洋来的点可以通过: 3:都不濒临 ...

  6. Linux下开启MySQL的远程连接

    今天在用客户端工具远程连接mysql的时候,连接不上,以为是防火墙,关了防火墙后依然打不开,后开在网上查了下原来mysql基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root ...

  7. Android Studio打包签名全过程

    Step1:Build-----Generate Step2:签名文件保存位置,习惯性的保存在项目的根目录下E:\Users\StudioProject\SmartHust\smarthust.jks ...

  8. 工厂模式 - 程序实现(java)

    09年5月CSDN一网友提出如下问题: 设计一个用于管理银行客户的类BankCustomer: 仅描述客户的几个重要方面: 帐号.身份证号.姓名.联系方式.密码.账户余额. 所有的成员变量均用priv ...

  9. thinkphp 统计某个字段不重复数 总数

    $this->batch->count('DISTINCT intobatch');

  10. [PWA] sw-precache

    Link to CodeLab In this codelab, we'll retrace those steps but this time we'll use a tool called sw- ...