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. C++中函数的形参为数组时,实质形参是指针

    C++中函数的形参如果为数组的话,那么进行实参传递时,实参实际上换转化成指针.参考下面的例子: #include<iostream> using namespace std; void f ...

  2. pandas的离散化,面元划分

    pd.cut pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=, include_lowest=False) ...

  3. cmd命令记录

    一.查看端口号的使用情况 参考经验:https://jingyan.baidu.com/article/3c48dd34491d47e10be358b8.html 1.netstat -ano,列出所 ...

  4. Flume的基本概念

    Flume 概念 Flume 最早是Cludera提供的日志收集系统,后贡献给Apache.所以目前是Apache下的项目,Flume支持在日志系统中指定各类数据发送方,用于收集数据. Flume 是 ...

  5. consul-template + nginx部署高可用负载均衡

    一.Consul-Template简介 Consul-Template是基于Consul的自动替换配置文件的应用.在Consul-Template没出现之前,大家构建服务发现系统大多采用的是Zooke ...

  6. 服务链路追踪(Spring Cloud Sleuth)

    sleuth:英 [slu:θ] 美 [sluθ] n.足迹,警犬,侦探vi.做侦探 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元.由于服务单元数量众多,业务的 ...

  7. R语言——实验5-聚类分析

    针对课件中的例子自己实现k-means算法 调用R语言自带kmeans()对给定数据集表示的文档进行聚类. 给定数据集: a)         数据代表的是文本信息. b)        第一行代表词 ...

  8. Java-Runoob-高级教程-实例-方法:01. Java 实例 – 方法重载

    ylbtech-Java-Runoob-高级教程-实例-方法:01. Java 实例 – 方法重载 1.返回顶部 1. Java 实例 - 方法重载  Java 实例 先来看下方法重载(Overloa ...

  9. Abp IRepository 方法解释(1)

    //    // 摘要:    //     This interface is implemented by all repositories to ensure implementation of ...

  10. XXE注入攻击与防御

    在研究XXE注入攻击之前先了解一下什么是XXE 定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括 ...