- 浏览: 716577 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (389)
- flex (150)
- java (55)
- flex_sharedObject (4)
- iphone/android (7)
- red5 (4)
- blazeds (19)
- ajax (3)
- flex&java (9)
- 聊天室 (2)
- flex的问题 (1)
- game (8)
- flex_xml (1)
- flex组件学习 (2)
- JGroups (1)
- 中转站 (2)
- ruby (7)
- flex_js (5)
- C/C++ (14)
- perl (2)
- db (13)
- air (10)
- hibernate (8)
- flash_flex_as_3d (2)
- struts (4)
- dwr (8)
- freemarker (2)
- AS (22)
- 工具 (6)
- js_jquery_ext_yui (4)
- .net (1)
- C# (1)
- 前端 (1)
最新评论
-
136900923:
您好,您的代码我不是很懂,我想跟您交流一下,我的qq邮箱:13 ...
hibernate做无限极菜单树如此简单 -
fykyx521:
两个同一个功能
flex_flush_Socket 安全沙箱解决 -
ustb:
你上下两个代码类之间没关系
flex_flush_Socket 安全沙箱解决 -
u010656335:
...
flex发送QQ表情 -
u010656335:
flex发送QQ表情
文章分类:Java编程
http://blog.donews.com/shanyou/archive/2005/04/16/338539.aspx
处理逻辑(Advice):在某个连接点所采用的处理逻辑。
切点(PointCut):一系列连接点的集合,它指明处理方式(Advice)将在何处被触发,可以使用正则表达式表达。
Advisor:是PointCut和Advice的综合体,完整描述了一个advice将会在pointcut所定义的位置被触发。
附注:
AOP全名Aspect - Oriented Programming,我们先来看看XXX - Oriented的意义,通常翻译「XXX导向」,也就是以XXX为中心,例如中文中「客户导向」就是以客户为中心,而「对象导向」(OOP:Object - Oriented Programming)就是以对象为中心的程序设计。
自然的,Aspect - Oriented Programming,就是「Aspect导向程序设计」,也就是以Aspect为中心的程序设计,但什么是Aspect?中文直译通常是「方面」,但这个名词容易使人混淆。
牛津字典中的英英解释对Aspect是:particular part or feature of sth being considerd .
所以Aspect在英文中不只有「方面」的意思,还有部份(part)的意思。中文中称「就这个方面来说」,通常指的是「就这个角度来说」或「就这个方向来说」,这个解释不适用于AOP中的Aspect。如果英文中说from this aspect of sth,除了可以翻译为上面两句的意义之外,还可以翻作「就这个部份来说」。
以我们的前一个主题中的记录(log)动作插入至HelloSpeaker对象的hello () 中为例,我们说「就记录这个部份」是不属于HelloSpeaker职责的,它被硬生生切入HelloSpeaker中,英文中我们可以说:The logging aspect of the "hello" method doesn 't belong to the job of HelloSpeaker.
所以以整个方法的执行流程来说,如果执行流程是纵向的,则记录这个动作硬生生的「横切」入其中,这个横切入的部份我们就称之为Aspect,它是横切关 注点(crosscutting concern,一个concern可以像是权限检查、事务等等)的模块化,将那些散落在对象中各处的程序代码聚集起来。
所以Aspect要用中文表达的话,适切一些的名词该是「横切面」或「切面」。AOP关注于Aspect,将这些Aspect视作中心进行设计,使其 中从职责被混淆的对象中分离出来,除了使原对象的职责更清楚之外,被分离出来的Aspect也可以设计的通用化,可运用于不同的场合。
来看事务管理这个Aspect如何在动态代理下被抽取出来,下面是一个简单的概念,基本上是在Handler中先激活事务,执行存储层动作,方法执行成功则提交(commit),失败则回滚(rollback):
代码 :
TransactionHandler . java
public class TransactionHandler implements InvocationHandler {
private Object delegate ;
public Object bind ( Object obj ) {
this . delegate = obj ;
return Proxy . new ProxyInstance (.., .., ..);
}
public Object invoke ( Object proxy , Method method , Object [] args ) {
Object result = null ;
.....
YourTransaction transaction = null ;
try {
transaction = yourMethodForGettingTransaction ();
result = method . invoke ( delegate , args );
transaction . commit ();
}
catch ( YourException e ) {
if ( transaction != null ) {
try {
transaction . rollback ();
}
catch ( Exception e ) {}
}
}
....
return result ;
}
}
在AOP中,有好几个关键的概念,然而其中更主要的是:PointCut、Advice与Advisor。这些术语并不是很直观,我们配合我们上一个主题的HelloSpeaker来说明会比较容易理解。
PointCut是JointPoint的集合,JointPoint是指Aspect加入的阶段点,例如某个方法被调用,某个成员被存取(Spring不支持),或是某个例外被丢出,以我们前一个主题的HelloSpeaker为例,hello () 方法就是一个JointPoint。PointCut为JointPoint的集合,意味着多个方法或例外丢出可以使用同一个处理建议(Advice)。
Advice是在JointPoint上所要调用的处理建议(在JointPoint上所采取的动作,许多AOP框架通常以interceptor来实作Advice,之后会介绍),例如记录、事务处理、权限检查等。
Advice类型(advice type)有Around、Before、Throws、After returning。这些Advice类型会分别在以下的时机被调用:在JointPoint前后、JointPoint前、JointPoint丢出例 外时、JointPoint执行完毕后。
就我们上一个例子来说,我们在hello () 这 个JointPoint上会调用Around Advice,即我们的LogHandler。事务管理调用的Advice类型也是属于Around Advice,即上面的TransactionHandler,调用的JointPoint可能是某个DAO对象的saveXXX () 方法。
Advisor将PointCut与Advice组合在一起,我们前一个主题中的HelloSpeaker例子很简单,故而没有使用到Advisor,之后会介绍到Advisor。
补充:动态代理是比较常见的AOP实作策略,在《Expert One - on - One J2EE Development WIthout EJB》 Rod Johnson、Juergen Hoeller中的第八章中有提到,AOP的实作有五个主要的策略:
Dynamic Proxies
Dynamic Byte Code Generation
Java Code Generation
Use of a Custon Class Loader
Language Extensions
发表评论
-
android Activity注解方式获取UI实例 绑定事件
2013-04-27 14:30 2140使用注释方式代替findVIewById 并绑定事件 示 ... -
SQL server ResultSet is Read only
2010-07-08 14:48 1012//stmt = cn.createStat ... -
java问题
2010-04-27 12:49 5961.一个空的index.jsp,结果还是出现了NullPoin ... -
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta
2010-04-07 11:21 1738http://www.2mysite.net/Article/ ... -
jconsole的使用手册
2010-04-07 11:19 794http://hi.baidu.com/xuwanbest/b ... -
程序员对于市场的反应能力
2010-03-19 17:18 699去年iphone ,i ... -
string stringbuffer区别
2010-03-16 18:09 916转:http://blog.csdn.net/yirentia ... -
ArrayList Vector LinkedList 区别与用法
2010-03-10 22:15 667http://www.cnblogs.com/mgod/arc ... -
Apache Tomcat on mac.
2010-03-07 18:19 1184转:http://llleooo.spaces.live ... -
手工编译jsp
2010-03-01 15:46 1697A java-classpath jasper.jar;ser ... -
Java安装后JDK/bin目录下的众多exe文件的用途
2010-01-26 13:22 877http://nanhaochen.blog.51ct ... -
jsp tag标签 SKIP_BODY,EVAL_PAGE,EVAL_BODY_INCLUDE,EVAL_BODY_AGAIN返回值的各个含义及区别
2010-01-15 12:58 3031http://blog.csdn.net/achun2050/ ... -
远程控制TOMCAT启动
2010-01-12 16:59 1521http://www.java-cn.com/club/? ... -
java js获取来源页面
2009-12-15 11:14 1875java 获取来源页面:System.out.println( ... -
开源协议简介BSD、Apache Licence、GPL、LGPL、MIT
2009-12-14 09:47 1161http://gchuyun.iteye.com/blog/2 ... -
ant build.xml详解
2009-12-08 11:12 1305http://xiaobian.iteye.com/blog/ ... -
java -jar -classpath
2009-12-03 16:03 1964突然发现自己不会命令行运行程序 http://www.zea ... -
apache commons-dbutils
2009-11-26 17:21 987一、关于DbUtils commons-dbutil ... -
javaFile路径空格问题
2009-11-26 16:20 1094File file =new FIle(URI);用这个 M ... -
ffmpeg截图
2009-11-17 15:26 1328http://forum.mox.cc/posts/list/ ...
相关推荐
本篇文章将详细讲解Spring AOP的实例,包括Pointcut和Advisor两个关键概念,同时结合源码和工具进行深入探讨。 首先,让我们了解什么是Spring AOP。AOP(Aspect-Oriented Programming)是一种编程范式,它允许...
在 Spring AOP 中,Advisor 是一个组合了通知(Advice)和切入点(Pointcut)的对象,它定义了何时以及如何执行特定的操作。 首先,我们要理解 AOP(面向切面编程)的核心概念。AOP 是一种编程范式,旨在减少代码...
总之,Spring AOP是Java开发中实现关注点分离的强大工具,通过理解advice、pointcut和advisor这三个核心概念,我们可以有效地利用它来提高代码的可维护性和可扩展性。对于初学者来说,通过实践和理解这些概念,可以...
在Spring AOP中,主要有三个核心概念:Advice、Pointcut和Advisor。 1. Advice(通知): Advice描述了在特定连接点(Join Point)上执行的动作。在Spring AOP中,Advice主要与方法调用相关,用于向现有方法添加...
理解这两个概念的区别有助于开发者更高效地利用Spring AOP来解决实际问题。 ### 参考资料 - [Spring 官方文档](https://docs.spring.io/spring-framework/docs/current/reference/html/aop.html) - [Spring AOP ...
3. **Advisor**:Advisor是将Advice和Pointcut组合在一起的组件。它负责在正确的时间、正确的地点应用Advice。在Spring中,Advisor可以通过XML配置文件或注解来定义。 在实现Spring AOP的例子中,我们创建了一个`...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件...通过理解advice、pointcut和advisor这三个核心概念,开发者可以更有效地利用Spring AOP实现日志记录、事务管理等各种功能,提高代码的可维护性和可扩展性。
AOP的核心概念包括Advice、Pointcut和Advisor。 1. **Advice(通知)**: Advice是指在特定连接点(Joinpoint)执行的代码片段,它代表了横切关注点的实现。在Spring AOP中,Advice有四种类型: - **前置通知...
在Spring中,AOP的实现依赖于两个主要组件:通知(Advice)和切点(Pointcut)。通知是实际执行的增强代码,如方法调用前的记录日志;切点是通知应该应用到的方法或类。Spring支持五种类型的的通知:前置通知...
1. Advisor接口:Advisor是AOP的核心概念,它封装了Pointcut(切入点)和Advice(通知)。一个Advisor可以识别何时应用特定的Advice,并决定在何处应用。 2. Pointcut接口:Pointcut是程序执行中的一个特定点,如...
Spring AOP通过代理模式实现了这一功能,提供了切点(Pointcut)、通知(Advice)、切面(Aspect)、织入(Weaving)等关键概念。 在Spring中,切入点定义了我们希望执行增强的地方。它可以是一个方法签名、类名...
- XML配置:通过`<aop:config>`标签定义切面,然后使用`<aop:advisor>`标签来声明具体的Advice。 ```xml <aop:config> <aop:aspect ref="myAspect"> <aop:before method="beforeMethod" pointcut="execution(* ...
例如,我们可以使用`<aop:pointcut>`定义一个切入点表达式,然后在`<aop:advisor>`中引用这个切入点,并指定对应的Advice。 总结: `org.aopalliance.aop.Advice.jar`和`net.springsource.cglib-2.2.0.jar`是...
Advisor在Spring AOP中相当于Aspect,结合了Pointcut和Advice,提供了更灵活的配置方式。 七、AOP ProxyFactory和自动代理 ProxyFactory用于创建代理对象,而自动代理则是Spring框架自动为满足条件的对象创建代理。...
3. **Advisor**:顾问,将Advice和Pointcut结合在一起,定义何时何地应用哪个Advice。DefaultPointcutAdvisor是Spring提供的一个Advisor实现,它包含Advice和Pointcut属性,允许我们自定义这两部分。 接下来,我们...
`Advisor`是一个组合了切点(Pointcut)和通知的对象,它定义了拦截哪些方法以及如何拦截。而`Pointcut`则定义了匹配的方法签名,决定了拦截器的生效范围。 例如,我们可以创建一个`Pointcut`来匹配所有标注了特定...
它定义了一些基础的切面接口,如Advisor(顾问)、Pointcut(切点)和Advice(通知),这些接口在不同的AOP框架中通用,有助于实现跨框架的切面代码重用。 Aspects则是AspectJ中的核心概念,它代表了关注点的封装...
<aop:advisor advice-ref="loggingAdvice" pointcut-ref="serviceMethods"/> </aop:config> <aop:aspect id="loggingAdvice"> <aop:before method="beforeMethod" pointcut-ref="serviceMethods"/> <aop:after ...
然后,我们将介绍 Spring AOP 框架所涉及到的核心组件列表,包括 Advisor、Advice、Pointcut、Advised、AopProxy 和 AopProxyFactory 等组件,并详细介绍它们之间的结构关系图。 首先,让我们来了解 AOP 的基本概念...