惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
V
V2EX
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
量子位
Engineering at Meta
Engineering at Meta
Forbes - Security
Forbes - Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
I
Intezer
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
P
Proofpoint News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
Google DeepMind News
Google DeepMind News
T
Tenable Blog
Know Your Adversary
Know Your Adversary
Cisco Talos Blog
Cisco Talos Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
Stack Overflow Blog
Stack Overflow Blog
博客园 - 【当耐特】
S
Securelist
T
Tailwind CSS Blog
Simon Willison's Weblog
Simon Willison's Weblog
Microsoft Security Blog
Microsoft Security Blog
博客园_首页
P
Privacy International News Feed
K
Kaspersky official blog
T
Tor Project blog
L
LINUX DO - 热门话题
Apple Machine Learning Research
Apple Machine Learning Research
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threat Research - Cisco Blogs
G
GRAHAM CLULEY
Last Week in AI
Last Week in AI
L
LangChain Blog
C
Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
博客园 - 叶小钗
I
InfoQ

博客园 - YFeng_Lee

webHttpBinding+wsHttpBinding+basicHttpBinding的区别 (转) AppDomain对于静态对象的独享引用 AppDomain 详解(转) .net工具 InstallShield12 添加自定义对话框,并根据输入值修改对应的Config文件。 普通管理类程序开发之难度系数、层次之说法(转自csdn) 待阅读书目 C#开发Windows Service程序 创建一个windows service应用程序 Ext简介(转) Ext的组件结构分析(转) XML与数据库 分析模式 - 责任模式 NHibernate Cascades: the different between all, all-delete-orphans and save-update 企业开发框架NHibernate和Spring.Net简介-4 企业开发框架NHibernate和Spring.Net简介-3 企业开发框架NHibernate和Spring.Net简介-1 Nhibernate学习之many-to-many篇(转 明了篇) Nhibernate学习起步之many-to-one篇(转 明了篇)
企业开发框架NHibernate和Spring.Net简介-2
YFeng_Lee · 2008-09-05 · via 博客园 - YFeng_Lee

1.5.3 Spring.Net介绍

Spring框架由一个容器,一个配置和组织组件的框架,和一组内置的为事务、持久化和Web用户接口提供的服务组成。Spring.Net是一个关注于.NET企业应用开发的应用程序框架,它能够提供非常丰富的功能,例如依赖注入(Dependency Injection),面向方面编程(Aspect Oriented Programming),数据访问抽象以及ASP.NET集成等。Spring.NET脱胎于Java的Spring框架,其1.0版包括了一个功能完整的反转控制容器和AOP函数库,在后续的版本中将包含对ASP.NET、Remoting和数据访问的支持。Spring.Net的框架如图1-53所示。

图1-53 Spring.Net的框架图

1.控制反转

IoC是近年来兴起的一种思想,主要是协调各组件间相互的依赖关系,同时大大提高了组件的可移植性,组件的重用机会也变得更多。在传统的实现中,由程序内部代码来控制程序之间的关系。我们经常使用new关键字来实现两组键间关系的组合,这种实现地方式会造成组件之间耦合(一个好的设计,不但要实现代码重用,还要将组件间关系解耦)。IoC很好地解决了该问题,它将实现组件间关系从程序内部提到外部容器,也就是说由容器在运行期将组件间的某种依赖关系动态注入组件中。

分离关注(Separation of Concerns:SOC)是产生IoC模式和AOP的最原始动力,通过功能分解可得到关注点,这些关注可以是组件、方面或服务。

GOF设计模式中,我们已经习惯一种思维编程方式——接口驱动。接口驱动有很多好处,可以提供灵活的子类实现,增加代码稳定和健壮性等,但是接口一定是需要实现的,即如下语句一定要执行。

AInterface a = new AInterfaceImp();

AInterfaceImp是接口AInterface的子类,Ioc模式可以根据需要延缓接口的实现,有个比喻:接口如同空的模型套,在必要时向模型套注射石膏,成为一个模型实体。可以人为控制接口的实现完成“注射”。

IoC的实现方式有以下几种:

*    基于接口的(Interface-based IoC,Type-1)。

*    基于设值的(Setter-based IoC,Type-2)。

*    基于构造的(Construtor-based IoC,Type-3)。

下面通过简单的例子分别介绍上述几种实现方式。

(1)Type-1。基于接口的设计方法通常是利用接口将调用者与实现者分离。

#001 public class Sport {

#002 private InterfaceBall ball; //InterfaceBall是定义的接口

#003 public void init() {

#004 //Basketball实现了InterfaceBall接口

#005 ball = (InterfaceBall) Class.forName("Basketball").newInstance();}

#006 }

Sport类在编译期依赖于InterfaceBall的实现,为了将调用者与实现者分离,可以动态生成Basketball类并将其强制类型转换为InterfaceBall。

(2)Type-2。基于设值的设计方法是通过在类中暴露setter方法来实现依赖关系。

#001 public class Sport {

#002 private InterfaceBall _ball;

#003 public InterfaceBal1 ball

#004 {

#005     set{ _ball = value ;} }

#006 }

Spring.NET就是实现了该类型的轻量级容器。

(3)Type-3。通过构造方法完成依赖关系。

#001 public class Sport {

#002 private InterfaceBall ball;

#003 public Sport(InterfaceBall arg) {

#004 ball = arg; }

#005 }

由于Type-3在构造期就形成了对象的依赖关系,所以对对象的重用变得困难。有些框架需要组件提供一个默认的构造方法,此时就显现出Type-3的局限性。通常所有的参数都是通过构造方法注入的,当对象间的依赖关系较多时,构造方法就显得比较复杂,不利于单元测试。PicoContainer就是实现了Type-3依赖注入模式的轻量级容器。

2.Spring.NET库

Spring.NET库有6个基本组成部分,基本上涵盖了Spring.NET框架的所有功能结构。

*    Spring.Core库是Spring.NET框架最基础的部分,它提供了依赖注入的功能。Spring.NET中大部分的函数库都依赖于这个核心库提供的功能,或者是对核心库的扩展。IObjectFactory是核心容器接口,负责管理容器内的注入对象,而IApplicationContext则是IObjectFactory的继承,它扩展了一些功能。

*    Spring.Aop库为商业逻辑对象提供了面向方面编程的支持,它为创建企业应用和为商业对象提供服务打下了基础,是Spring核心库中IoC容器的补充。

*    Spring.Web库为ASP.NET增加了很多功能,例如ASP.NET页面的依赖注入,数据双向绑定,为ASP.NET提供母版页功能,增强了本地化支持。所有的这些都是对ASP.NET很好的扩展。

*    Spring.Services库可以将任何一个“普通”对象(“普通”是指该对象不是继承自特殊服务的基类)暴露成为一个企业应用(COM+)或者远程对象。因为对依赖注入和原数据属性重载的支持,.NET 中的Web服务会获得更好的配置上的灵活性。同样,该库也提供了对Windows服务的支持。

*    Spring.Data库为.NET提供了一个数据访问层的抽象,它能够用于从ADO.NET到多种ORM Provider的数据访问提供者。它同时包含了一个ADO.NET抽象层,简化了对ADO.NET的编码和事务管理。

*    Spring.ORM库提供了一个用于常见的对象—关系映射库的综合层,它提供了诸如对事务管理的支持等功能。