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

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
T
The Blog of Author Tim Ferriss
腾讯CDC
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
爱范儿
爱范儿
GbyAI
GbyAI
H
Help Net Security
I
InfoQ
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
人人都是产品经理
人人都是产品经理
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
Netflix TechBlog - Medium
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
云风的 BLOG
云风的 BLOG
Project Zero
Project Zero
P
Privacy & Cybersecurity Law Blog
A
Arctic Wolf
Know Your Adversary
Know Your Adversary
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tor Project blog
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
WordPress大学
WordPress大学
V
Visual Studio Blog
博客园_首页
G
GRAHAM CLULEY
K
Kaspersky official blog
T
Tailwind CSS Blog
T
Threat Research - Cisco Blogs
博客园 - Franky
D
Docker
Security Latest
Security Latest
I
Intezer
有赞技术团队
有赞技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 【当耐特】
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 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简介-2 企业开发框架NHibernate和Spring.Net简介-1 Nhibernate学习之many-to-many篇(转 明了篇) Nhibernate学习起步之many-to-one篇(转 明了篇)
企业开发框架NHibernate和Spring.Net简介-3
YFeng_Lee · 2008-09-05 · via 博客园 - YFeng_Lee

3.面向方面编程(AOP)

面向方面编程是对面向对象编程(OOP)的补充,是另外一种思考编程框架的方法。面向对象是将应用分解成具有层次结构的对象;而面向方面编程则是把程序分解成方面或者关注点,使诸如事务管理等方面的模块化成为可能。Spring.NET中很关键的一个组件就是AOP框架。能够帮助Spring.NET的 IoC容器为企业应用提供一个非常强大的中间件解决方案。

AOP用于Spring.NET可以完成下列功能。

*    提供公开的企业服务,尤其是作为COM+公开服务的替代者。这些服务中最重要的服务是公开的事务管理,这是Spring.NET事务抽象的基础。

*    允许用户实现定制的方面,通过面向方面编程来补充面向对象编程的不足。

用户不但可以把Spring.NET AOP看作是能够不通过COM+就可以提供公开事务管理的技术,而且还可以充分发挥Spring.NET AOP框架的功能区实现定制方面。

通过上面的介绍读者可能对AOP已经有了一个大致的了解,下面介绍几个关于AOP的概念。

*    方面(Aspect):这个是一个让读者感觉比较模糊的概念,它和通常意义上的方面不完全一样,它是对关注点的模块化,这可能会横切多个对象。事务管理是一个非常好的横切关注点企业应用的例子。在Spring.NET中,方面作为建议者或者监听器的形式实现。

*    连接点(Jointpoint):程序运行期间的一些点,例如方法调用或者特殊的异常被抛出。

*    建议(Advice):AOP框架在一个特殊连接点上采取的动作。这些不同类型的建议包括“around”、“before”和“throws” 等建议。很多AOP框架,包括Spring.NET,都把一个建议模拟成一个监听器,同时维护一个“around”连接点的监听器链。

*    切点(Pointcut):一组连接点,用于指定建议应该激活的时间。一个AOP框架必须能够允许开发人员指定切点,例如,使用正则表达式。

*    介绍(Introduction):添加方法或域到建议类。Spring.NET允许介绍一个新的接口到任何一个建议对象中。例如,为了简化对对象状态变化的跟踪,可以使用建议为任何对象实现一个IAuditable接口。

*    目标对象:包含连接点的对象。

*    AOP代理:由AOP框架创建的对象,包括建议。在Spring.NET中,一个AOP代理是一个在运行期使用IL代码生成的动态代理。

*    Weaving:装配对象创建一个被建议对象。装配工作发生在编译期(例如使用Gripper-Loom .NET编译器),也能发生在运行期。Spring.NET在运行期执行装配动作。

4.Spring.NET应用实例

下面以经典的Movie Finder作为Spring.NET应用实例来讲解IoC容器的使用方法。实例的C#代码可以在Spring.NET发布版的examples/Spring/Spring.Examples.MovieFinder目录中找到。

(1)Movie Finder。MovieFinder例子的起始类是MovieApp类,这是具有单一应用程序入口点的普通.NET类。代码如下所示:

#001 using System;

#002 namespace Spring.Examples.MovieFinder

#003 {

#004     public class MovieApp

#005     {

#006          public static void Main ()

#007          {

#008          }

#009     }

#010 }

现在想做的是获得一个对MovieFinder类实例的引用。这是Spring.NET例子,所以要从Spring.NET的IoC容器类IApplicationContext获得这个引用。应用程序配置文件中的IApplicationContext配置信息如下:

#001 <?xml version="1.0" encoding="utf-8" ?>

#002 <configuration>

#003 <configSections>

#004 <sectionGroup name="spring">

#005 <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>

#006 <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />

#007 </sectionGroup>

#008 </configSections>

#009 <spring>

#010 <context>

#011 <resource uri="config://spring/objects"/>

#012 </context>

#013 <objects>

#014 <description>An example that demonstrates simple IoC features.</description>

#015 </objects>

#016 </spring>

#017 </configuration>

将在应用程序示例中用到的对象配置成嵌套在<objects/>元素中的<object/>元素。