AOP原理及在架构设计中的应用(二)
【摘要】 面向方面的编程(AOP)技术已在Java领域产生多年,它为传统的编程模式带来了一种新的思维和方式。AOP本身为程序结构带来的灵活性,在JavaEE架构设计上也能发挥极大的作用。本文对AOP原理,Spring AOP基本编码方式进行了简明,清晰的介绍,还对公司项目实践中AOP的基本应用模式进行了归纳,整理, 有更贴近实践的指导意义。
【关键词】AOP JavaEE 架构设计
1.3.4. 拦截器串
通常,系统关注的功能有很多,例如:日志,事务,缓存等等,因此,实际系统中,通常是多个拦截器同时工作,形成一个拦截器串,各自关注相应特定的功能。
拦截器串协同工作的基本方式为
1)串行执行,即几个拦截器,按顺序依次执行。
但在有些系统中还存在特殊需求:
2) 忽略执行
在某些情况下,例如:sayHello的参数是“Admin”时,不记录日志,只开启事务和缓存功能, 那么Log拦截器的日志记录功能需要被忽略。这种情况通常在LogAdvisor内部,对参数进行判断来实现。
public class LogAdvisor extends MethodBeforeAdvice {
private static Log log = LogFactory.getLog(LogAdvisor.class);
public void before(Method method, Object[] args, Object target) throws Throwable {
if(“Admin”.equals(args[0]))
if(log.isDebugEnabled())
log.debug("记录日志(前):" + target +", 方法:" + method.getName());
}
|
3) 跳出执行
public class SecurityInterceptor implements MethodInterceptor {
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
if(“Admin”.equals(args[0]))
return “管理员,你好!”;//实际执行方法
else
return proxy.invokeSuper( obj , args);
}
}
|
在某些情况下,要求终止被拦截的方法的实际执行,不再继续执行下一拦截器,而直接返回特定的结果,例如:sayHello的参数是“Admin”时,让该方法返回固定的值“管理员,你好!”。
1.3.5. AOP适用的方面
由于AOP技术本身的插件式特点,采用这种机制进行系统设计和程序开发能够为软件带来极大的灵活性和扩展性。目前,运用AOP对系统进行功能扩展主要关注的方面是:
Transactions 事务,例如Spring就利用AOP提供了通用性的事务管理器。
Logging, 日志,还包括Tracing等;
Profiling and Monitoring 性能分析和监控。
Authentication 权限,包括鉴权,安全控制等;
Caching 缓存,
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
Performance optimization 性能优化
等等。
2. 架构设计中AOP的运用
2.1. 运用方式
架构采用了JavaEE规范中经典的三层架构:表示层、业务层、持久层,如下图所示:
与一般的JavaEE架构不同, 该架构通过Factory模式在各层之前进行搭桥,通过对应的Factory类来创建下层对象。
工厂机制运用了Spring AOP技术,上层对象在请求下层资源时,可以通过代理机制切入若干功能,使得可以灵活扩展系统功能,而又使各层着重关注本职核心功能。值得注意的是,表示层采用的是Struts2框架,而它本身就是基于AOP原理进行设计的。如下图所示:
由于运用了Spring AOP技术,方面(Aspect)的开发就变成拦截器(Spring称为Advisor)的开发。该架构将Spring AOP规范定义的before,after,throwing三个阶段,和CGLib定义的invoke阶段整合为了一个抽象类: AbstractAdvisor, 方便设计人员开发新的拦截器。
并且Spring通过AOP机制已经提供通用的事务(Transaction)控制,调试(Debug),类加载分析,并发控制,简单的性能监控等基础性功能。
分享到:
- 2008-08-17 22:10
- 浏览 1973
- 评论(0)
- 论坛回复 / 浏览 (0 / 2301)
- 查看更多
相关推荐
《Spring技术内幕:深入解析Spring架构与设计...第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex模块等基于Spring的典型应用的设计与实现。
如果你以一种淡定的心态翻开这本书,无论你是Java程序员、Spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从《Spring技术内幕:深入解析Spring架构与设计原理》中受益。...
第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex模块等基于Spring的典型应用的设计与实现。 无论你是Java程序员、Spring开发者,还是平台...
本资源将深入探讨软件开发中两个关键的设计和编程概念:三层架构设计模式(MVC)和面向切面编程(AOP)。这两个概念是现代软件开发中不可或缺的组成部分,它们有助于提高代码的可维护性、可扩展性和可重用性。通过...
第二部分深入阐述了各种基于IoC容器和AOP的JavaEE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex模块等基于Spring的典型应用的设计与实现。无论你是Java程序员、Spring开发者,还是平台...
第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex模块等基于Spring的典型应用的设计与实现。 无论你是Java程序员、Spring开发者,还是...
第二部分深入阐述了各种基于IoC容器和AOP的JavaEE组件在Spring和的实现原理,第三部分讲述了ACEGI安全框架、DM模块以及Flex模块等基于Spring的典型应用的设计与实现。无论你是Java程序员、Spring开发者,还是平台...
如果你以一种淡定的心态翻开这本书,无论你是Java程序员、Spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从《Spring技术内幕:深入解析Spring架构与设计原理》中受益。...
如果你以一种淡定的心态翻开这本书,无论你是Java程序员、Spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从《Spring技术内幕:深入解析Spring架构与设计原理》中受益。...
本书从源代码的角度对spring的内核和各个主要...第二部分深入阐述了各种基于ioc容器和aop的java ee组件在spring中的实现原理;第三部分讲述了acegi安全框架、dm模块以及flex模块等基于spring的典型应用的设计与实现。
第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex模块等基于Spring的典型应用的设计与实现。论你是Java程序员、Spring开发者,还是平台开发...
第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex模块等基于Spring的典型应用的设计与实现。论你是Java程序员、Spring开发者,还是平台开发...
spring如何在web环境中集成ioc容器并为web应用开发提供利器? 我们耳熟能详的mvc模式在spring中是如何实现的? spring mvc如何灵活地集成各种丰富的视图展现方案? spring实现远端调用的方案有很多种,你...
spring如何在web环境中集成ioc容器并为web应用开发提供利器? 我们耳熟能详的mvc模式在spring中是如何实现的? spring mvc如何灵活地集成各种丰富的视图展现方案? spring实现远端调用的方案有很多种,你...