`
zhaohaolin
  • 浏览: 985444 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring.Net入门篇(一) [转]

 
阅读更多

简介 
 
    从OO到AOP,一路走来就是眼花缭乱的术语,蒙蔽了这些东西的本来面目。如果你还在驻足,那你就该尝试着看看这个软件开发的世界里,是谁在狂欢!

     Martin Fowler 很大师,两篇论文就搞的开发界鸡飞狗跳、鸡犬不宁。一篇当然是《Inversion of Control Containers and the Dependency Injection pattern》  (04年 控制反转和依赖注入) ,另一篇则是《Continuous Integration 》(06年 持续集成)。如果提这两篇论文,则不能不说在.net开发中与之相关的框架或者工具:Spring.Net和CruiseControl.Net,而前一个也是我们要学习的对象。

    八卦:中国的体制怎么没有催生出写这些论文的人呢,论文不必是该死的教授才能写的吧!
    再 八卦:题外的话,研究一个人的东西先要看他的拥有技能和所处环境,否则Context就不对了。对于Martin Fowler.我只能说深入OO,到设计模式,到重构,到测试驱动,到敏捷编程。一路下来,再认识认识Kent Beck,Rod Johnson 。想必收获不小。

  
      Spring.Net“翻译”自Java版本的Spring。这篇文章展示一些基本问题,关于理论性的东西最好去读读上面推荐的论文,不做累述。


   环境配置

    1.下载最新的框架Spring.Net 1.1.1 . 并安装。
    2.新建测试的Windows Application 程序。 引用Spring.Core.dll到工程下。
    3.增加配置文件App.Config,配置Spring.Net信息如下:

<? 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" />
    
</ context >
    
< objects  xmlns ="http://www.springframework.net" >
      
    
</ objects >
  
</ spring >
</ configuration >


 objects标签是我们配置加载对象的地方。

  加载对象

    看过PetShop源代码的人对这项功能可能很熟悉,不再累述,举例说明:
   
    以下代码加载Speaker类。
   
   Speaker 类的代码。

using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  SpringExample
{
    
public   class  Speaker
    
{
        
private   string  _name  =   " Not Modify " ;

        
public   string  Name
        
{
            
get   return  _name; }
            
set   { _name  =  value; }
        }

        
private  IName _nameInterface;
        
public  Speaker()
        
{
 
        }

        
public  Speaker( string  name)
        
{
            _name 
=  name;
        }

        
public  IName NameInterface
        
{
            
set   { _nameInterface  =  value; }
            
get   return  _nameInterface; }
        }


        
    }

}



按照以下步骤加载Speaker类。

1.在App.Config中配置Speaker 类的信息,注意在objects标签下。

< object  name ="Speaker"       type ="SpringExample.Speaker, SpringExample" >
 
</ object >

2.以下为调用代码

using  Spring.Context;
using  Spring.Context.Support;

    
private   void  button1_Click( object  sender, EventArgs e)
        
{
            
/* 普通调用 */
            IApplicationContext ctx 
=  ContextRegistry.GetContext();
            Speaker speaker 
=  (Speaker)ctx.GetObject( " Speaker " );
            MessageBox.Show(speaker.Name);
        }

 执行结果为“No Modify”


 属性注入和构造函数注入

     注入方式有几种,可以参考Rod Johnson的《Spring框架高级编程》(Java)。 这里只以上述两种方式举例。

     Speaker类的NameInterface属性是获取IName这样的接口,我们可以在Spring.Net中配置信息,让Speaker创建后就已经有了一个可以使用的IName接口。

    以下为IName和NameImpl类的代码。

using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  SpringExample
{
    
public   interface  IName
    
{
        
string  MyName();
    }

}


using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  SpringExample
{
    
public   class  NameImpl:IName
    
{
        
#region  IName Members

        
public   string  MyName()
        
{
            
return   " From Spring " ;
        }


        
#endregion

    }

}


    
 1.配置App.Config,为Speaker类的NameInteface属性注入NameImpl类。

       < object  name ="Speaker"       type ="SpringExample.Speaker, SpringExample" >
        
< property  name ="NameInterface"  ref ="Impl" />
      
</ object >
      
< object  name ="Impl"         type ="SpringExample.NameImpl, SpringExample" >
      
</ object >


 2.调用代码如下:

using  Spring.Context;
using  Spring.Context.Support;

  
private   void  button3_Click( object  sender, EventArgs e)
        
{
            
/* 属性注入 */
            IApplicationContext ctx 
=  ContextRegistry.GetContext();
            Speaker speaker 
=  (Speaker)ctx.GetObject( " Speaker " );
            MessageBox.Show(speaker.NameInterface.MyName());
        }


  执行结果是"From Spring".

 构造函数注入:

    注意看Speaker类有一个含有一个参数的构造函数,我们这次要配置该参数的值由配置文件传入。
   
  1.配置App.Config,为Speaker类的构造函数传入参数。

< object  name ="Speaker"       type ="SpringExample.Speaker, SpringExample" >
        
< constructor-arg  index ="0"  value ="From Construct" />
     
      
</ object >


   
 2.调用代码如下:

using  Spring.Context;
using  Spring.Context.Support;

 
private   void  button2_Click( object  sender, EventArgs e)
        
{
            
/* 构造注入 */
            IApplicationContext ctx 
=  ContextRegistry.GetContext();
            Speaker speaker 
=  (Speaker)ctx.GetObject( " Speaker " );
            MessageBox.Show(speaker.Name);
        }


执行结果为:From Consturct

   好了剩下的就是大家举一反三,从三到万了。

 

http://www.cnblogs.com/lwlzyjl/archive/2008/04/18/1159712.html

程序还需要引用antlr.runtime程序集

IApplicationContext ctx = ContextRegistry.GetContext()中出现问题:

1."Spring.Context.Support.ContextRegistry的类型初始值设定项引发异常 " 没有引用Common.Logging.dll

2.Error creating context 'spring.root': 元素 命名空间“http://www.springframework.net”中的“object”。 的子元素 命名空间“http://www.springframework.net”中的“constructor-arg”。 无效。应为可能元素的列表: 命名空间“http://www.springframework.net”中的“property, lookup-method, replaced-method, listener”。

原因:App.Config中constructor-arg 配置要要放在属性前面。

<?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"/>
    </context>
    <objects xmlns="http://www.springframework.net ">
      <object name="Speaker" type="TestSpring.Speaker, TestSpring">
        <constructor-arg index="0" value="From Construct"/>
        <property name="NameInterface" ref="Impl"/>    
      </object>
      <object name="Impl" type="TestSpring.NameImpl, TestSpring">
      </object>
    </objects>   
  </spring>
</configuration>

分享到:
评论

相关推荐

    SpringCloud之Eureka入门篇

    SpringCloud之Eureka入门篇https://blog.csdn.net/u012081441/article/details/80708060

    asp.net知识库

    如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 Essential .NET 读书笔记 [第一部分] ...

    springsecurity入门代码资源

    hello大家好,这里是X,今天这篇博文带来的是SpringBoot安全管理:SpringSecurity,讲到安全管理,不得不说几乎所有的大型项目开发必备之一,而且有了它,对项目的安全也起到了非常大的效果,可以说是项目搭建的必备...

    ASP.NET编程宝典光盘源码

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    SpringFramework5.0入门篇

    本文来自于博客园,本文主要介绍在项目中开始使用spring-framework的推荐方法...SpringFramework是一个开源的Java/JavaEE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。

    Spring全家桶核心篇:SpringBoot快速入门 源码

    内容概要:该资源是Spring全家桶视频课程的第三部分Spring Boot的源码,其对于Spring Boot的最常用的第一个小程序、JavaConfig和常见注解、启动改变、热部署、Springboot整合Thymeleaf/freemarker/JSP、异常处理、...

    ASP.NET编程宝典(十年典藏版)》光盘源码1

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    spring-zwz.zip

    spring一篇入门博文的配套资源,包含了第一个spring程序、IOC控制反转、DI依赖注入、静态代理、动态代理、AOP面向切面编程等源代码

    rabbitmq-spring

    http://my.oschina.net/u/136848/blog/288736 参考这个哥们写的例子 入门篇

    《ASP.NET编程宝典(十年典藏版)》光盘源码2

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    Java Web整合开发王者归来(共4部分含源代码)part1

    第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、...

    JSF2.0快速入门的基本教程.ppt

    学习之前建议先对依赖注入有比较清楚的认识,可以参考我的learn Spring in spring系列的第一篇。 本系列将以两个例子来讲解jsf的基本开发,第一个例子当然是hello world。目前可用的jsf ide不多,ibm要到06年才能...

    Flex 入门 系列文档

    本人自己写的一篇文档 主要讲了Flex开发入门的基础知识 包括java端访问以及 spring集成 以及crossdomain文件讲解 源码位于http://download.csdn.net/detail/zhaoshansanxia/4115320 其中包含parsley介绍,源码位于...

    IT开发方面的视频教程以及案例视频

    Jquery2.0实战 使用SSH框架技术开发学籍管理系 统-Hibernate 部分 ...Extjs 在 Asp.Net 中的应用基础篇 Extjs 在 Asp.Net 中的应用进阶篇 Extjs 在 Asp.Net 中的应用高级篇 .........................

    ASP_NET初探

    这是一篇完整的论文,对初学ASP.NET者很有帮助

    iuhyiuhkjh908u0980

    一、理论篇: 持续集成鼓励尽量短周期内项目团队的代码提交,同时保证每次check in都不会损害我们的构建通过。它跟每日构建的区别就在于代码提交频率更高(一般为一个小时),构建的频率也更高,这样做的目的就是...

    Java接入ChatGPT聊天API源码

    非常入门简单的Java源码,详细的注释即便是Java入门者或者对ChatGPT一点都不了解的人都可以看懂接入的流程。 技术栈:JDK1.8,springboot,okhttp,guava 配合这篇文章使用效果更佳 ...

    java面试题以及技巧

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题目与技巧1

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

Global site tag (gtag.js) - Google Analytics