spring.net (2)环境搭建 对(1)例子的解释和扩充
在上文中的例子实现了spring.net 控制反转的简单例子:
但是不免其中会有一些疑问。
例子中的配置文件是什么意思:
app.config的配置规则可以参考web.config的配置详情
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
加入spring环境支持,注册了这个节点处理器后,配置文件中的<spring>节点才能起作用。
<context>节点的type属性是可选的,在Windows应用中,其默认值就是Spring.Context.Support.XmlApplicationContext
那么在
上个例子中我是用了 :
<resource uri="file://objects.xml"></resource>
来指定访问文件的访问吧objects.xml里的配置信息加入resource中
这里的uri常用的还有两种方式: assembly://程序集名/命名空名/文件名 加载嵌入的资源的xml文件
config://spring/objects 直接使用app.config 中的配置 <objects xmlns="http://www.springframework.net"/> 里的配置信息: 值得注意的是:xml配置中 xmlns="http://www.springframework.net"是必须添加的: 在上篇博客里中,容器的实例化:
IApplicationContext ctx = ContextRegistry.GetContext();//直接读取配置文件重的配置信息。
实际物理路径
IResource input = new FileSystemResource(@"D:\Objects.xml"); //实际物理路径
IObjectFactory factory = new XmlObjectFactory(input);
程序集下寻求配置文件
string[] xmlFiles = new string[]
{
"file://Objects.xml"
};
IApplicationContext context = new XmlApplicationContext(xmlFiles); IObjectFactory factory = (IObjectFactory)context;
Console.ReadLine();
在objects.xml中对对象定义:
其中:
对象标识符 (id和name):
一个对象有一个或多个id,id在容器中应该是唯一的,一个对象通常只有一个标识符,如果指定了多个标识符,其余的被认为是别名。
在xml定义对象时,用id或者name属性来定义对象的标识符。每个对象都需要用id或name属性定义至少一个标识符。id属性允许为对象定义指定一个唯一的id,因为在Spring.NET的shcema文档中,id被标识为XML元素的ID属性,XML解析器可以在其它元素引用它的时候进行验证,在配置对象标识符时,应该优先使用id属性。但是,id属性值不能包含任何XML ID不允许使用的字符。如果一定要使用这些字符,应该使用name属性,在name属性中也可以通过逗号或分号为对象指定一个或多个别名。
Singleton和Prototype:
对象可以通过两种模式布署:singleton和非singleton(或者叫做prototype,只是用在这里不是很合适)。当一个对象被定义为singleton时,容器中就只会有一个共享的实例,任何时候通过id或别名请求该对象都会返回这个共享实例的引用(也就是说这个对象只会被创建一次)。
当使用非singleton,或者说原型模式布署时,每次请求对象都会创建新的实例。在某些场合,如果需要为每个用户返回单独的用户对象或其它对象,非singlton布署模式就比较理想。
如果没有显式指定,对象的布署模式默认为singleton。注意非singleton(原型)模式会使Spring.NET在每次请求对象时都创建新的实例,这也许并非是我们预期的行为。所以,除非绝对需要,否则不要使用原型模式。
property
对对象的属性实力还,可以直接指定name="属性名" value="属性值" 或者 ref="实例化的为另一个对象的id"
注意:在为泛型类对象指定type属性的时候要注意:第一,左尖括号<要替换成字符串“<”,因为在XML中左尖括号会被认为是小于号。从可读性来讲,我们都知道这并不是理想的方式。第二,type参数值中不能包含程序集的名称,因为程序集名称要求和类型全名用逗号隔开,而在这里逗号已经被用来分隔泛型类的类型参数了。将来可能会用其它字符代替这两个符号,但目前还没找到更具可读性的方案。若要提高可读性,建议使用类型别名,如下所示:
<typeAliases>
<alias name="GenericDictionary" type=" System.Collections.Generic.Dictionary<,>" />
<alias name="myDictionary" type="System.Collections.Generic.Dictionary<int,string>" />
</typeAliases>
然后,下面的对象定义:
<object id="myGenericObject"
type="GenericsPlay.ExampleGenericObject<System.Collections.Generic.Dictionary<int , string>>, GenericsPlay" />
就可以缩短为:
<object id="myOtherGenericObject"
type="GenericsPlay.ExampleGenericObject<GenericDictionary<int , string>>, GenericsPlay" />
或者更短:
<object id="myOtherOtherGenericObject"
type="GenericsPlay.ExampleGenericObject<MyIntStringDictionary>, GenericsPlay" />
使用Spring.NET框架经常用到的一下几个文件:
Common.Logging.dll(必要)
Spring.Core.dll(必要)
Spring.Data.dll
Spring.Aop.dll(可选)
Spring.Data.NHibernate21.dll
Spring.Web.dll
最新文章
- pymol installation
- iOS小知识点(UI部分)
- Another app is currently holding the yum lock
- Java提高篇(三二)-----List总结
- SVNServer迁移
- 史上最全的CSS样式整理
- 《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本
- Android APK方式换肤实现原理
- HDU 3360 National Treasures
- java学习笔记----java入门
- [记录]MySQL读写分离(Atlas和MySQL-proxy)
- Gram 矩阵与向量到子空间的距离
- python 模块之-ffmpeg 中文参数对照表
- WebApi路由解析增加版本控制
- drawRect中抗锯齿
- Fiddler 会话过滤功能
- window10安装composer
- bzoj2716/2648 / P4169 [Violet]天使玩偶/SJY摆棋子
- angular2.0学习笔记6.编程风格指南
- 帧动画 连续播放多张图片动画 以及ui动画 SoundPool