概述
通过Spring.NET,我们可以用统一且透明的方式来配置应用程序。Spring.NET的重点是为中间层提供声明式事务管理,以及一个功能齐全的ASP.NET扩展框架。
Spring.NET是非侵入式的,代码对框架本身不会产生任何依赖。它能够提供很多方面的功能,例如控制反转(Inversion of Control,英文缩写为IoC)、依赖注入(Dependency Injection,英文缩写DI)、面向方面编程(AOP)、数据访问抽象, 以及ASP DOTNET集成等。
关键词
IOC(控制反转,Inversion of Control)
就是创建对象的权利由开发人员自己控制New,转到了由容器来控制;
DI(依赖注入,Dependency Injection)
就是在通过容器来创建对象的时候,在对象的初始化是可以给一些属性、构造方法的参数等诸如默认值(可以是复杂的类型)
AOP——权限校验——日志处理。
实例说明
如下是小demo中的配置文件部分:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<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"/>
<!--关联自己添加的services.xml文件,所使用资源来自services.xml-->
<!--services.xml文件属性设置为“始终复制”,每次运行都把services.xml复制到debug-->
<resource uri="file://services.xml"/>
</context>
<objects xmlns="http://www.springframework.net">
<!--description>An example that demonstrates simple IoC features.</description>
<object name="UserInfoService" type="CZBK_ItcastOA.SpringNet.UserInfoService, CZBK ItcastOA.SpringNet">
--><!-- 为UserInfoService添加属性设置 --><!--
<property name="UserName" value="zhangsan"/>
--><!--value为属性值,ref关联object,Person类--><!--
<property name="Person" ref="Person"/>
</object>
<object name="Person" type="CZBK_ItcastOA.SpringNet.Person, CZBK ItcastOA.SpringNet">
<property name="Age" value="16"/>
</object>-->
</objects>
</spring>
</configuration>
为了能够实践Spring.net,我们可以添加一个XML文件,将配置文件中的objects节点中的内容全部复制到新添加的XML文件中,对应到以上代码,小编先添加了一个services.xml文件,以下是services中的所有内容:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<description>An example that demonstrates simple IoC features.</description>
<object name="UserInfoService" type="CZBK_ItcastOA.SpringNet.UserInfoService, CZBK ItcastOA.SpringNet">
<!-- 为UserInfoService添加属性设置 -->
<property name="UserName" value="zhangsan"/>
<!--value为属性值,ref关联object,Person类-->
<property name="Person" ref="Person"/>
</object>
<object name="Person" type="CZBK_ItcastOA.SpringNet.Person, CZBK ItcastOA.SpringNet">
<property name="Age" value="16"/>
</object>
</objects>
当然原配置文件中的objects节点要保留,只是节点中的所有内容可以提取出到services中。
另外还要在原配置文件中添加关联,获取service中的资源:
<resource uri="file://services.xml"/>
遇上步骤完成之后,还有一个地方需要修改,就是将services.xml的文件属性设置为“始终复制”,这样一来,程序运行就不会出现找不到文件的问题了!
为什么要把objects中的内容抽出来呢?这不用说大家也明白。大项目的开发总是会有多人参与的,动用代码那是必然的,但配置文件只有一个的情况下,如果objects写在配置文件中,那要么会造成不必要的冲突,要么就会耽误开发进度。但如果把objects提出来,并按照需求添加多个XML,各个模块各自动用各自的xml文件,这样一来,一系列棘手的问题就解决啦。