Spring.net两大核心内容:

  • IOC(控制反转)

传统的面相对象思维模式是对象A依赖对象B,对象B的实例化和调用都在对象A中发生,一旦对象B中发生变化,对象A也要随之变化,这样使得程序间行程了紧密的耦合度

IOC是一种编程思想,其理念就是借助于第三方来实现解耦。IOC核心是一个IOC容器,所有对象的控制权全部交给IOC容器,由IOC容器负责创建对象。模式由原来的创建对象--使用对象到被动接收IOC容器创建对象--使用对象,此期间对对象的控制权反生了转变,因此被称为控制反转

  • DI(依赖注入)

DI是实现控制反转的一种编程方式,简单来说就是在A对象中需要使用到B对象,则在A对象中必要new B( ),但是假设B对象发生变化,实例化时传入参数发生变化,这时候 就需要修改A的代码。

解决的办法很简单,就是将B作为对象传入,A对象内直接接收  this.b = B ;

介绍完原理来看一看使用方法:

1. 下载Spring.net包   下载地址:http://www.springframework.net/download.html

2. 解压并拷贝 \Spring.NET-1.3.1\bin\net\4.0\release 目录下

Common.Logging.dll
Spring.Core.dll
Spring.Web.dll
Spring.Web.Extensions.dll
Spring.Web.Mvc.dll

的拓展文件到项目lib目录下,并在Web项目中添加引用

3. 在项目下添加Config目录,创建 controllers.xml 

在controllers.xml 中注册控制器类

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"> <object type="MyProject.Controllers.UserInfoController, MyProject" singleton="false" >
<property name="userInfoService" ref="UserInfoService" />
</object> <!--intentionally do NOT register the AccountController with the container; demonstrates that the underlying
default controller factory will properly (attempt to!) resolve all controllers not registered with Spring.NET
using its default controller resolution behavoir-->
<!--<object type="Spring.MvcQuickStart.Controllers.AccountController, Spring.MvcQuickStart" singleton="false" />-->
</objects>

object节点用于注册控制器,

type属性下以此声明 命名空间+类名 , 程序集,

property属性用于声明控制器类中的属性,如果是引用类型需要用ref指向其Service.xml下注册对象类的name属性

4. 在Config目录下创建一个Service.xml

在此xml文件下注册BLL层中各个类

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<object type="MyProject.BLL.UserInfoService, MyProject.BLL" singleton="false" name="UserInfoService" > </object>
</objects>

5.在Web.config文件下注册以下信息

在<configSections><configSections>节点下添加

    <sectionGroup name="spring">
<!--spring.Net的配置-->
<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc"/>
</sectionGroup>

在根节点<configuration></configuration>节点下添加

  <spring>
<!--spring.Net配置-->
<context>
<!--修改成相应的目录-->
<resource uri="file://~/Config/controllers.xml"/>
<resource uri="file://~/Config/Service.xml"/>
</context>
</spring>

6.最后别忘了修改Golbal.asax入口文件

    public class MvcApplication : SpringMvcApplication //System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}

至此就已经完成了业务层与逻辑层的解耦

在Controller控制器下仅需要声明属性,程序运行时便会自动传入相应的对象

private IUserInfoService userInfoService { get; set;}

Spring.net介绍及MVC中应用的更多相关文章

  1. MVC中路由

    篇目 介绍 路线的性质 了解缺省路由 用一个例子的路由 结论 介绍 本文介绍了MVC中的路由.如何执行的路线是由路由引擎和如何定义的URL路由. ASP.NET MVC的路由是一个模式匹配系统,负责传 ...

  2. 浅谈MVC中路由

    引言 学习ASP.NET MVC 路由这一关是肯定必不可少的.这一节,我们就来简单介绍下MVC中的路由机制.简单的路由机制相信大家都已了解,这一节主要介绍路由中很少使用的部分. 使用静态URL片段 在 ...

  3. Spring Batch 中文参考文档 V3.0.6 - 1 Spring Batch介绍

    1 Spring Batch介绍 企业领域中许多应用系统需要采用批处理的方式在特定环境中运行业务操作任务.这种业务作业包括自动化,大量信息的复杂操作,他们不需要人工干预,并能高效运行.这些典型作业包括 ...

  4. ASP.NET MVC 中解决Session,Cookie等依赖的方式

    原文:https://blog.csdn.net/mzl87/article/details/90580869 本文将分别介绍在MVC中使用Filter和Model Binding两种方式来说明如何解 ...

  5. Http请求中Content-Type讲解以及在Spring MVC中的应用

    引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 ...

  6. Spring MVC中处理静态资源的多种方法

    处理静态资源,我想这可能是框架搭建完成之后Web开发的”头等大事“了. 因为一个网站的显示肯定会依赖各种资源:脚本.图片等,那么问题来了,如何在页面中请求这些静态资源呢? 还记得Spring MVC中 ...

  7. Spring MVC 中的REST支持

    本部分提供了支持 RESTful web 服务的主要 Spring 功能(或注释)的概述. @Controller 使用 @Controller 注释对将成为 MVC 中控制器的类进行注释并处理 HT ...

  8. Http请求中Content-Type讲解以及在Spring MVC中的应用【转】

    完全引用自: http://blog.csdn.net/blueheart20/article/details/45174399#t1   此文讲得很清晰,赞! 引言: 在Http请求中,我们每天都在 ...

  9. Http请求中Content-Type和Accept讲解以及在Spring MVC中的应用

    在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在 ...

随机推荐

  1. 【nginx】之proxy_pass

    在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径:如果没有/,表示相对路径,把匹配的路径部分也给代理走.     假设下面四种情况分别用 h ...

  2. maven打包时跳过测试

    本文转载自:https://blog.csdn.net/thc1987/article/details/42458895 运行mvn install时跳过Test 方法一: <project&g ...

  3. [UE4]声音系统概述

    一.只能使用wav格式的声音 二.wav声音可以直接播放到打开的UE4编辑器内打开的Content文件夹.也可以直接导入 三.在Content中的文件夹的声音资源可以直接拖放到场景中,会以3D场景声音 ...

  4. [UE4]非常实用的SizeBox控件

    Desired:表示以期望的实际尺寸显示视图. SizeBox最好作为Child Widget的根节点.(如果SizeBox的父节点是Canvas Panel,SizeBox会变成可拉伸,ChildL ...

  5. 关于Centos7 firewalld防火墙开放端口后仍不能访问ftp和nginx的问题解决

    我在阿里轻量应用服务器搭建ftp服务器这篇博客中把防火墙换为iptables,因为当时无论我怎么设置firewalld,就是无法访问ftp服务器,今天在翻看其他博客的时候,突然发现firewalld有 ...

  6. CentOS安装Git,并上传、下载

    转自:https://blog.csdn.net/u014066037/article/details/70224780 Git 一.安装Git $ yum install git 二. 生成SSH密 ...

  7. UE4中多种颜色轮廓线的后期处理

    转自:http://blog.csdn.net/pizi0475/article/details/50396277 随着近来虚幻引擎4的一些变化,渲染多种颜色的轮廓线已经可以实现了!通过自定义模板,类 ...

  8. 解决sql中上下左右backspace不能用的方法

    一. 解决输入 BACKSPACE 键变成 ^h 的问题 #su - oracle $stty erase ^h. 要永久生效,可以加入到用户环境配置文件 .bash_profile 中 , 加入如下 ...

  9. (转)SQL知识_SqlParameter数组

    原文地址:http://www.cnblogs.com/FredTang/archive/2012/03/29/2423651.html 温故而知新,做做笔记先.        SqlParamete ...

  10. 用singleton单例模式实现一个模块

    对于具有唯一性的模块(例如,购物车项目中的物品数据,各个页面都要使用它,而且是唯一的数据),用singleton模式. var mySingleton = (function() { var priv ...