1.Spring.Net的简单介绍

spring.net 框架是微软效仿java中的spring框架而推出的一种在.net中使用的框架,它使用配置的方式实现逻辑的解耦,它的主要功能集成在Spring.Core.dll文件中,主要的功能有IOC(控制反转)、DI(依赖注入)、AOP(面向切面编程)等。

IOC:没有解耦之前,我们创建一个对象需要将这个对象new出来,这样耦合性太大,所以我们使用抽象工厂的方式创建,Spring.net在这方面就是工厂,所以它可以说是一个功能强大的工厂,不仅仅有产生对象的功能,所以Spring.net 将创建对象的工作交给(IApplicationContext)容器创建,这就是控制反转。

DI:依赖注入,就是在容器创建一个对象的时候,可以通过容器注入的方式,对属性进行赋值。

AOP:面向切面编程,MVC中的Filter就是使用的面向切面编程的思想。

2.Spring.Net的简单使用(参照Spring.net的使用手册,第25章快速入门IOC)

(1).添加相关的引用

Spring.Core.dll

Common.Logging.dll

(2).修改配置文件

主要就是往容器中添加相应的类和给类注入属性等工作

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>-->
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="config://spring/objects"/>
</context>
<objects xmlns="http://www.springframework.net">
<object name="UserInfo"
type="SpringIOCDemo.UserInfo, SpringIOCDemo"> //类型,程序集
</object>
</objects>
</spring>
</configuration>

注意:一定将spring的配置文件写在Confiuration节点的开头,否则将会报错

可以将objects单独放在一个配置文件中,只需要在resource的uri属性加入正确的文件路径就OK

写在同一个配置文件中,使用config://+路径。例如:uri="config://spring/objects",
写在其他的文件中可以使用“file://objects.xml”,使用文件的绝对路径

(3)可以像使用工厂类一样创建配置到容器中的对象

IApplicationContext ctx=ContextRegistry.GetContext();
IUserInfo userInfo=(IUserInfo)ctx.GetObject("UserInfo");(接口会去调用相应的实现)

3.Spring.net在MVC中的使用

(1)除了上述例子中添加的dll,还需要添加web相关的dll和MVC相关的dll

(2)创建自己的配置文件(如:controllers.xml和service.xml)

controller.xml

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<!--配置控制器-->
<object type="OA.WebApp.Controllers.UserInfoController, OA.WebApp" singleton="false" >
<property name="userInfoService" ref="UserInfoService" />
</object> </objects> service.xml <?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<!--配置控制器-->
<object name="UserInfoService" type="OA.BLL.UserInfoService, OA.BLL" singleton="false" >
</object> </objects>

(3).然后配置web.Config文件,将spring.net中相关的配置添加上,同时将上面的自己创建的配置文件的路径添加在web.Config中

  <configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<!--spring.net的配值-->
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="file://~/Config/controllers.xml"/>
<resource uri="file://~/Config/service.xml"/>
</context>
</spring> <!--spring.net配置结束-->

(3).接下来就可以使用spring.Net 创建出控制器的实例了。当然Controller和其他我们自定义的类不一样,它是属于MVC的,这些从容器中获取实例对象的操作已经早就封装好了,接下来就是修改Global文件,让Global 下的MvcApplication 继承自SpringMvcApplication,就可以了

(4)可以直接使用了

  public class UserInfoController : Controller
{
//使用spring.Net的属性注入
public IBLL.IUserInfoService userInfoService { get; set; }
}

Spring.Net的使用的更多相关文章

  1. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  2. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  3. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  4. [Spring]IoC容器之进击的注解

    先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...

  5. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  6. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  7. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  8. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  9. Spring之旅(2)

    Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...

  10. Spring之旅

    Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...

随机推荐

  1. 关于在Andoird集成开发软件中添加外部jar包的方法

    步骤必须是下面的两步,少一步都不行. 第一步是存放于项目中,第二步是导入和应用于项目中. 1.右键项目-Build Path-Configure Build Path-在Libraries目录下-点右 ...

  2. 【转】【c++】指针参数是如何传递内存的

    参数策略 如果函数的参数是一个指针,不要指望用该指针去动态申请内存.如下: void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(c ...

  3. C的内存四大区

    前提 看视频得来的内容,只知道不止4个区,但主要是这4个区. 四区 静态区 用于存放所有的全局变量和静态变量. ; //静态区 int main(){ ; //静态区 ; } 代码区 就是存放程序的执 ...

  4. nodejs基础 -- 交互式解析器(REPL)

    ------------类似在浏览器中调试js代码----------------------- Node.js REPL(交互式解释器) Node.js REPL(Read Eval Print L ...

  5. MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption 2017-05-18 16:45

    wget "https://raw.githubusercontent.com/rapid7/metasploit-framework/6d81ca42087efd6548bfcf92417 ...

  6. 简单日历插件jquery.date_input.pack

    html: <link rel="stylesheet" type="text/css" href="css/jquery.date_input ...

  7. ChemDraw加键的两种方法

    绘制化学结构离不开9种ChemDraw键工具,键工具在绘制过程中提供了最大的使用优势,这种优势体现在键角.键长的绘制,故很有必要学习相关的ChemDraw使用技巧.本ChemDraw教程将具体介绍在C ...

  8. [转] COM编程总结

    一.Com概念 所谓COM(Componet Object Model,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准.通 ...

  9. go语言的time.Sleep

    首先:time.sleep单位为:1ns (纳秒) 转换单位: 1纳秒 =1000皮秒      1纳秒 =0.001 微秒      1纳秒 =0.000 001毫秒        1纳秒 =0.0 ...

  10. .net多线程,线程异步,线程同步,并发问题---1---ShinePans

    申请线程,输出线程状态: using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...