ASP.NET MVC Spring.NET 整合
请注明转载地址:http://www.cnblogs.com/arhat
在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做。同理这个三个技术也是。那么在整合之前,需要对
ASP.NET,Spring.NET,NHibernate有所了解,最好是有一些经验,因为平白无故的就把3个技术融合到一起,会闹些小别扭,其实就像配置化学药品一样,如果3中原料有一点出路,那么整个实验也就失败了。
在网上有很多高人都写过类似的文章,可能是鄙人不才,看了很多文章都没有把我的问题解决了,同时我在整合的过程中走了不少的弯路。今天做一下记录,防止自己忘掉。好了,言归正传。
整合原理:
我们在初中,高中都学过化学,知道有些物质是不能很好的反应,需要通过催化剂来促使两者之间更改好的反应。那么我们就把ASP.NET MVC看成是物质A,NHibernate看成是物质C。本身A+C=应用。但是由于A和C之间结合会带来开发上的一些难题(比如事务的控制),那么怎么办呢,我们可以加入催化剂Spring.NET(物质B)。这样通过B这个催化剂很好的解决了A+C之间的问题。于是公式就出来了A+B+C=应用。
当然,我们这里是程序设计而不是化学反应,所以在结合的过程中我们遵循下面的步骤。
1. ASP.NET + Spring.NET
2. ASP.NET + NHibernate
3. ASP.NET +Spring.NET +NHibernate
一、ASP.Net MVC与Spring.NET整合
首先我们建立一个空的解决方案“MVCSpring”。在解决方案中加入两个项目,一个Web项目,一个类库项目。如图所示:
这里我们使用的是Spring.Net 1.3.2,因为它支持ASP.NET MVC3,如果要使用ASP.NET MVC4的话,那么可以使用Spring.NET 2.0。
1. 在Web项目中,我们加入:
Spring.Core.dll,Spring.Data.dll,Spring.Web.Mvc3.dll的引用。
2. 配置Web.config
其中红色圈中的部分,是对Spring.NET的设置,让应用程序启动的时候就启用Spring.NET。需要注意的地方是对于Context的设置是是Spring.Web.Mvc3程序集中提供的Spring.Context.Support.MvcContextHandler。
然后在<spring>节点中提供了Context的资源<resource uri=""/> ,暂时先为空,稍后我们补充其资源。
代码:
<configSections> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc3"/> </sectionGroup> </configSections> <spring> <context> <resource uri=""/> <resource uri=""/> </context> </spring>
3. 创建Controller和视图
在Controllers文件中创建一个HomeController.cs。代码如下:
public class HomeController : Controller { public string Name { get; set; } public ActionResult Index() { ViewBag.Name = this.Name; return View(); } }
视图文件代码:
<!DOCTYPE html> <html> <head> <title>Index</title> </head> <body> <div> Hello Spring MVC @ViewBag.Name </div> </body> </html>
4. 配置文件
在Web项目中添加一个文件夹Config,并在其中创建一个Controllers.xml文件。
内容如下:
<objects xmlns="http://www.springframework.net"> <object type="Com.Symjie.Web.Controllers.HomeController,Com.Symjie.Web" singleton="false"> <property name="Name" value="济公罗汉"></property> </object> </objects>
这个文件还用来配置Contoller的,配置的原因是让Spring.NET来管理Controller而不是让ASP.NET MVC来管理,更重要的原因是要使用Spring.NET的IoC机制。注意,在这里一定要把Controller设置为singleton="false",因为Controller不是单态的。
5. 更改Web.config文件,配置资源文件
<spring> <context> <resource uri="file://~/Config/Controllers.xml"/> <resource uri=""/> </context> </spring>
6. 更改Global.asax文件,让Spring.NET来管理Controller。
默认情况下,Global.asax中MvcApplication是继承于HttpApplication。那么如果要让Spring.NET来管理那么需要让MvcApplication继承与Spring提供的类:Spring.Web.Mvc.SpringMvcApplication。更改后代码如下:
public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication//System.Web.HttpApplication { public void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值 ); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } }
好了,到此呢我们就可以预览一下效果了。
7. 加强Spring.NET练习
在上面的几步中,我们学会了如何把ASP.NET MVC 和Spring.NET结合起来了,但是在Controllers.xml中,我们只是在HomeController中注入了一个普通的属性,那么如果要注入Com.Symjie.Model中的实体类该怎么办呢?那么这个练习就是用来说明如何做到的。
在Com.Symjie.Model中创建一个类Person。代码如下:
public class Person { public string Name { get; set; } public int Age { get; set; } }
在Com.Symjie.Model中创建一个Config文件夹,并创建Objects.xml文件, 代码如下:
<?xml version="1.0" encoding="utf-8" ?> <objects xmlns="http://www.springframework.net"> <object id="person" type="Com.Symjie.Model.Person,Com.Symjie.Model" singleton="false"> <property name="Name" value="济公罗汉"></property> <property name="Age" value="182"></property> </object> </objects>
注意,这个Objects.xml文件,需要把他设置为“潜入的资源”。否则无法读取。
然后更改Web.config文件,配置资源。代码如下:
<context> <resource uri="file://~/Config/Controllers.xml"/> <resource uri="assembly://Com.Symjie.Model/Com.Symjie.Model.Config/Objects.xml"/> </context>
打开HomeController文件,更改内容如下:
public Model.Person Person { get; set; } public ActionResult Index() { ViewBag.Person =this.Person; return View(); }
打开视图,更改内容如下:
Hello Spring MVC 我是:@ViewBag.Person.Name,我的年龄是:@ViewBag.Person.Age
打开Controllers.xml文件,更改HomeController的注入属性,代码如下:
<objects xmlns="http://www.springframework.net"> <object type="Com.Symjie.Web.Controllers.HomeController,Com.Symjie.Web" singleton="false"> <property name="Person" ref="person"></property> </object> </objects>
注意:ref="person",这里的person是Objects.xml文件中定义的对象名(id)
运行一下:
好了,这一章节到此结束,本章把ASP.NET MVC 和 Spring.NET只是一个简单的组合。下一章节,我们将讲解ASP.NET MVC 和 NHibernate的结合。
ASP.NET MVC Spring.NET 整合的更多相关文章
- [转]ASP.NET MVC Spring.NET NHibernate 整合
请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...
- ASP.NET MVC Spring.NET NHibernate 整合
请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...
- SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。
SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发.是目前企业开发比较流行的架构.代替了之前的SSH(Struts + Spring + Hibernate) 计划 ...
- Spring MVC Spring MyBatis 整合 - 快速上手
我个人比较喜欢写注释,在工作中对注释的重要性看的也比较高,所以大部分文字都在注释中,代码外的文字会写的偏少,关键能懂就行 先看一下整合后的工程目录(单工程,多工程以后会采用maven) 5个packa ...
- spring mvc ,spring boot 整合swagger
https://blog.csdn.net/qq_35992900/article/details/81274436
- ASP.NET MVC NHibernate 整合
请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...
- Asp.net MVC + EF + Spring.Net 项目实践3
Asp.net MVC + EF + Spring.Net 项目实践 这一篇要整合Model层和Repository层,提供一个统一的操作entity的接口层,代码下载地址(博客园上传不了10M以上的 ...
- Asp.net MVC + EF + Spring.Net 项目实践(目录)
用4篇博客来搭一个MVC的框架,可能对初学者会有一些帮助,大家共勉吧.我觉得对于中小型项目,这个框架可能还是有一定的用处的,希望能够帮助到一些人. Asp.net MVC + EF + Spring. ...
- 25、ASP.NET MVC入门到精通——Spring.net-业务层仓储
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...
随机推荐
- org.hibernate.HibernateException: could not instantiate RegionFactory [org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFacto ...
- VirtualBox中centos网络配置
VirtualBox图形界面下有四种网络接入方式,它们分别是: 1.NAT 网络地址转换模式(NAT,Network Address Translation) 2.Bridged Adapter 桥接 ...
- c++下new与delete基础用法
delete 释放new分配的单个对象指针指向的内存 delete[] 释放new分配的对象数组指针指向的内存那么,按照教科书的理解,我们看下下面的代码: ]; delete a; //方式1 del ...
- Android_Intent_data_type
layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...
- typeid关键字
这么看下去太要命了,有太多东西要学了... 而且视频看起来的确费神,费脑,费耳朵. 所以决定由视频驱动转向代码驱动.主攻vs,c++然后先把界面东西做出来,然后在想后面的东西. 所以今天 [先上来看了 ...
- C++的三大特性之一继承
一.继承的相关基本概念 1.继承的定义 在C++中,可以使用继承来使新类得到已定义的一些类中的特性,这就好比与孩子从父亲母亲得到遗传类似,所以我们称原有的类为基类或父类,用原有类来生成新的类的 ...
- 分布式 ES 操作流程解析
概念解析 CURD 操作 CURD 操作都是针对具体的某个或某些文档的操作,每个文档的 routing 都是确认的,所以其所在分片也是可以事先确定的.该过程对应 ES 的 Document API. ...
- 【转】android自动化测试之MonkeyRunner使用实例(三)
一.使用CMD命令打开模拟器 运行monkeyrunner之前必须先运行相应的模拟器或连上设备,不然monkeyrunner无法连接设备. 1.1 用Elipse打开Android模拟器或在CMD中 ...
- 今天学习image在html中的应用
今天学习image在html中的应用 上次在学习超级链接的使用中有一小问题,是在添加网址中href="http://www.baidu.com" 中不能忘记http://,否则链接 ...
- CSS常用布局实现方法
CSS 布局对我来说,既熟悉又陌生.我既能实现它,又没有很好的了解它.所以想总结一下,梳理一下 CSS 中常用的一列,两列,三列布局等的实现方法.本文小白,仅供参考.但也要了解下浮动,定位等. 一.一 ...