前言:
在做项目时候,我们都会创建实例对象,用于业务层与表示层(UI界面)进行交互。我们往往用抽象工厂创建实例对象。这次我们不用抽象工厂进行创建实例,而而是用一种比抽象工厂更厉害的一种技术Spring.Net进行实例创建。
接下来给大家介绍下Spring.Net。
Spring.Net简介:
Spring.Net是从Java里的移植过来的。实质上就是一个抽象工厂,但是比抽象工厂更强大,就是用一个容器来专门创建对象,Spring.Net创建容器的方法有很多种:其中一个就是通过配置文件将容器创建出来,接下来我介绍的也是通过 配置文件将 Spring.Net的容器创建出来的。
在Spring.Net我们必须知道里面的非常重要的概念:
①:IOC(控制反转):就是创建对象的权利之前由开发人员自己new,交给Spring.Net提供的容器去new.
②:DI(依赖注入):在通过容器创建对象实例的时候,是可以给对象初始化一些属性和构造方法里的变量注入一些默认值。
③:AOP(面向切面编程):就是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加 功能 的 一种技术。主要功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。
Spring.Net的IOC演示:
①:先引入四个dll文件(文章最后有下载地址供大家下载)
②:在Config里配置相应的信息
<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"/>
<resource uri="file://services.xml"/>//自己建的xml文件,用来存放需要创建的实例对象
</context>
</spring>
<!--Spring.Net配置结束-->
services里的代码:<!--添加xml的目的就是让object与config相分离,解决config代码冗重的问题-->
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<description>An example that demonstrates simple IoC features.</description>
<!--创建UserInfoService实例,type写创建该实例的类的全名称以及命名空间-->
<object name="UserInfoService" type="CZBK.ItcastOA.SpringNet.UserInfoService,CZBK.ItcastOA.SpringNet">
</object>
</objects>
③:创建实例
private void button1_Click(object sender, EventArgs e)
{
IApplicationContext ctx = ContextRegistry.GetContext();//记得引用Common.Logging
IUserInfoService lister = (IUserInfoService)ctx.GetObject("UserInfoService");
MessageBox.Show(lister.ShowMsg());
}
注意:如果不引用Common.Logging就会出现下面的错误
上面我没有直接用new这个关键字创建对象,而是在配置节里用Spring.Net的IOC创建对象。
Spring.Net的DI操作:(其实DI操作就是给创建对象的一些属相和构造方法里进行赋值,我们在程序中很少用到,这里给大家简 单说下吧)
举个例子大家就明白了:
定义一个接口:
建一个Person和UserInfoService类
接下来是重点:在配置节里给Person属性和UserInfoService的属性UserName传值
注意:name配置节里的name的值不是乱写的,要和程序中的字段保持一致
以上就是Spring.Net的DI操作。
注意:添加xml文件可能出现的错误:
FileNotFoundException: 未能找到文件“C:\Users\Administrator\Desktop\OA项\OA\Demo.Spring.Net\bin\Debug\services.xml”。
原因:这是因为我们所创建的xml文件只是在项目的根目录下,并没有在bin文件夹下。
解决办法:
①:赋值一份到bin目录(不建议这样做)
②:将services的属性改为始终赋复制
最后主角登场:
接下来是Spring.Net在MVC中的应用:
①:引入相应的文件
②:在项目中新建个文件夹Config(里面分别添加services.xml和controller文件夹),当然也可以都放在web.config里,不过 这样显得非常冗余。
controller里的代码:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<object type="OA.Web.Controllers.UserInfoController, OA.Web" singleton="false" >
<!--name代表的是在控制器里需要new的UserInfoService类型变量,ref连接的是需要创建实例的用户类-->
<property name="userInfoService" ref="UserInfoService"/>
</object>
</objects>
serviecs.xml里的代码:
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<!--配置相应的信息-->
<!--name是创建的业务类,type是该类的全名称-->
<object name="UserInfoService" type="OA.BLL.UserInfoService, OA.BLL" singleton="false" ></object>
</objects>
③:修改web.config里面的内容:添加下面的字节,放在<configSections>里
<!--Spring.Net配置-->
<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4" />
</sectionGroup>
<spring>
<!--Spring.Net配置,不要放在configSections标签里-->
<context>
<!--连接两个xml文件-->
<resource uri="file://~/Config/controllers.xml" />
<resource uri="file://~/Config/services.xml" />
</context>
</spring>
④:修改项目的Global文件
注意:如果出现未能加载文件或程序集“System.Web.Http.WebHost, Version=4.0.0.0, ”或它的某一个依赖项。系统找不到指定的文件。需要添加下面的的程序集(注意版本)
所有需要的dll文件下载地址:https://download.csdn.net/psearch/0/10/0/2/1/Spring
网盘上的下载链接;链接: https://pan.baidu.com/s/1NlZ1rFD6FyTAuviqfLO60A
提取码: qviv
Spring.Net知识完结!
结尾:分享:
没有收拾残局的能力,就别放纵善变的情绪