1 / 26

Spring. net 基础及应用

Spring. net 基础及应用. 数据事业部 – 陈卫钢. 2012-3-6. 深圳市国泰安信息技术有限公司. Agenda. Why Spring.net. Spring.net 基本介绍. Spring.net 应用 – IoC/DI. Spring.net 应用 – AOP. Spring.net 应用 – WCF. Spring.net 应用 – Transaction. Spring.net 应用 – Cache. Spring.net 应用 – 其他. 参考资料. Q&A. Why Spring.net.

buzz
Download Presentation

Spring. net 基础及应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Spring.net基础及应用 数据事业部 – 陈卫钢 2012-3-6 深圳市国泰安信息技术有限公司

  2. Agenda Why Spring.net Spring.net 基本介绍 Spring.net 应用 – IoC/DI Spring.net 应用 – AOP Spring.net 应用 – WCF Spring.net 应用 – Transaction Spring.net 应用 – Cache Spring.net 应用 – 其他 参考资料 Q&A

  3. Why Spring.net • “非侵入式应用”,对现有系统代码改动小 • “非all-or-nothing解决方案”,可以只应用其中一部分功能,减少代码量,提高开发效率 • 全面支持以配置的方式提供服务,使得应用系统更灵活,更强大 • 面向接口编程,系统高度解耦 • 面向切面编程,功能模块化,代码复用更简单 • 涵盖企业应用开发80%以上需求 • 支持Microsoft Visual Studio的各个版本

  4. Spring.net基本介绍 Spring.NET可以为很多领域的企业级应用开发提供“一站式服务”

  5. Spring.net 应用 – IoC/DI 核心是解耦 例:MovieLister,MovieFinderImpl 耦合:在MovieLister中直接创建MovieFinderImpl的实例, MovieLister完全依赖MovieFinderImpl IoC/DI:通过容器(Container)创建MovieFinderImpl的实例,并注入(Injection)到MovieLister中, MovieLister不需依赖MovieFinderImpl IoC/DI

  6. 应用程序类 配置(元数据) Spring.Net轻量级 容器 产出 为用户提供完全可配置的系统 Spring.net 应用 – IoC/DI 3大核心接口 IObjectFactory:容器接口 IApplicationContext :继承自IObjectFactory,提供了管理和操作对象的更多功能 IObjectDefinition:注入对象的定义接口,供IObjectFactory/IApplicationContext调用 Spring.net IoC/DI 是Spring.net最核心的部分,其他应用都以此为基础

  7. Spring.net 应用 – IoC/DI 注入的方式 构造器注入 属性注入 静态工厂方法注入 实例工厂方法注入

  8. Spring.net 应用 – IoC/DI 容器里对象的生命周期 Singleton 和Prototype 两种模式 Singleton模式的对象生命周期由容器进行管理,默认为此模式 Prototype模式的对象生命周期由对象使用者进行管理

  9. Spring.net 应用 – IoC/DI 典型配置文件: <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="MyMovieLister" type="TestSpring.MovieLister, TestSpring"> <property name="movieFinder" ref="MyMovieFinder"/> </object> <object name="MyMovieFinder" type="TestSpring.SimpleMovieFinder, TestSpring"/> </objects> </spring>

  10. Spring.net 应用 – IoC/DI Demo

  11. Spring.net 应用 – AOP AOP基本概念 AOP把程序分解为一系列方面(aspects)或者关注点(concerns)。 • 方面(Aspect):对横向分布在多个对象中的关注点所做的模块化。例如:事务管理 • 连接点(Joinpoint):程序执行过程中的一个点,例如对某个方法的调用 • 通知(Advice):AOP框架在某个连接点所采取的行为 • 切入点(Pointcut):指通知的应用条件,用于确定某个通知要被应用到哪些连接点上。 • 引入(Introduction):向目标对象添加方法或字段的行为。Spring.NET允许为任何目标对象引入新的接口。 • 目标对象(Target object):指包含连接点的对象。也称为被通知或被代理对象。 • AOP代理(AOP proxy):由AOP框架在将通知应用于目标对象后创建的对象。在Spring.NET中,AOP代理是使用IL代码在运行时创建的动态代理。 • 织入(Weaving):将方面进行组装,以创建一个目标对象。

  12. Spring.net 应用 – AOP 各种通知 • 环绕通知(Around Advise):包围(按:即在连接点执行的前、后执行)某个连接点(如方法调用)的通知 • 前置通知(Before Advise):在某个连接点执行之前执行,但是不具备阻止连接点继续执行的能力(除非它抛出异常)。 • 异常通知(Throws Advise):当方法(连接点)抛出异常时执行。 • 后置通知(After returning Advise):在连接点正常执行完成后执行 • 自定义通知:可编程实现自定义通知

  13. Aspect1, Aspect2, … 配置(元数据) Spring.Net AOP框架 业务系统 产出 为用户提供完整功能的系统 Spring.net 应用 – AOP 应用 • 事务管理 • 权限验证 • 日志记录 • 缓存管理 • … … Demo

  14. Spring.net 应用 – WCF • 通过配置自动Host Wcf服务 • 客户端通过配置自动创建Wcf服务代理 • 可组合使用AOP框架 Demo

  15. Spring.net 应用 – Transaction .net 事务管理API有哪几种?

  16. Spring.net 应用 – Transaction Spring.NET用一个统一的抽象层来进行事务管理,其优点如下: • 为不同的事务API,包括ADO.NET、企业服务、System.Transactoins和NHibernate,提供统一的编程模型 • 能够在上述任一种数据访问技术中使用声明式事务管理 • 为编程方式的事务管理提供了一套易用的API

  17. Spring.net 应用 – Transaction Spring.net 事务管理的实质还是AOP框架的应用:

  18. Spring.net 应用 – Transaction 规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:

  19. Spring.net 应用 – Transaction 应用代码片断(声明式事务管理) [Transaction(TransactionPropagation.Required)] public void DoTransfer(float creditAmount, float debitAmount) { accountCreditDao.CreateCredit(creditAmount); accountDebitDao.DebitAccount(debitAmount); } <objects xmlns="http://www.springframework.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.net/tx" xmlns:db=http://www.springframework.net/database> <db:provider id="DbProvider" provider="SqlServer-1.1" connectionString="Data Source=(local);Database=Spring;User ID=springqa;Password=springqa;Trusted_Connection=False"/> <object id="transactionManager" type="Spring.Data.Core.AdoPlatformTransactionManager, Spring.Data"> <property name="DbProvider" ref="DbProvider"/> </object> <tx:attribute-driven transaction-manager="transactionManager"/> </objects>

  20. Spring.net 应用 – Transaction 应用代码片断(编程方式) TransactionTemplate tt = new TransactionTemplate(TransactionManager); string userId = "Stewie"; object result = tt.Execute(delegate { dao.UpdateOperation(userId); return dao.UpdateOperation2(); });

  21. Spring.net 应用 – Transaction 通过IoC/DI使用事务管理 <object id="sharedTransactionTemplate" type="Spring.Transaction.Support.TransactionTemplate, Spring.Data"> <property name="TransactionIsolationLevel" value="IsolationLevel.ReadUncommitted"/> <property name="TransactionTimeout" value="30"/> </object>

  22. 内置两类Cache实现:Spring.Caching.AspNetCache:使用Asp.net缓存来存储Spring.Caching.NonExpiringCache:用内存记录,无过期可扩展自己的Cache实现:实现接口Spring.Caching.Icache即可,第三方缓存管理如memcached可实现此接口来让Spring.net统一管理内置两类Cache实现:Spring.Caching.AspNetCache:使用Asp.net缓存来存储Spring.Caching.NonExpiringCache:用内存记录,无过期可扩展自己的Cache实现:实现接口Spring.Caching.Icache即可,第三方缓存管理如memcached可实现此接口来让Spring.net统一管理 Spring.net 应用 – Cache 可使用Spring Expression Language (SpEL) 来生成缓存的key

  23. Spring.net 应用 – Cache 代码片断 [CacheResult("AspNetCache", "'Airport.Id=' + #id", TimeToLive = "0:1:0")] public Airport GetAirport(long id) { // implementation not shown... } 配置 <object" id="CacheAspect" type="Spring.Aspects.Cache.CacheAspect, Spring.Aop"/> <object id="AspNetCache" type="Spring.Caching.AspNetCache, Spring.Web”/> <object type="Spring.Aop.Framework.AutoProxy.ObjectNameAutoProxyCreator, Spring.Aop"> <property name="ObjectNames"> <list> <value>*Dao</value> </list> </property> <property name="InterceptorNames"> <list> <value>CacheAspect</value> </list> </property> </object>

  24. Spring.net 应用 – 其他 • 结合Nhibernate进行数据访问 • 帮助更好使用MSMQ进行数据通信 • 结合Log4Net进行日志记录 • 辅助进行Asp.net MVC 2/3 开发,提升开发效率 • 结合Quartz.NET进行调度系统开发 • 帮助更好的实现本地化 • 集成Asp.net AJAX,方便通过JavaScript调用web服务 • … … 核心还是 IoC/DI

  25. 参考资料 Spring.net官网: http://www.springframework.net   Spring.Net用户参考手册

  26. Q&A

More Related