科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用Spring 2.0和AspectJ简化企业应用程序

用Spring 2.0和AspectJ简化企业应用程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在本文中,作者首先了介绍在典型的企业应用程序中,Spring AOP和AspectJ适用于什么地方,之后介绍在2.0中新的Spring AOP支持。

作者:Adrian Colyer译者 俞黎敏 来源:infoq.com 2007年11月18日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共10页)

简化领域模型

具有影响你领域模型的多个部分的业务逻辑需求,这也并不罕见。有些明显的实例为:设计模式实现(请见Nick Leseicki关于这个主题的精彩的developerWorks文章 :part 1part 2),领域对象的依赖注入(例如使用Spring的@Configurable注解),以及业务规则和策略的实现。在采用的这个阶段,你的核心业务逻辑变成了依赖于方面的存在。

你编写的方面将特定于你的领域。AspectJ和AJDT都利用AspectJ构建,我们在它们的构建中使用了大量特定于领域的方面。举个例子,下面是我在1.5.1发布的开发期间增加到AspectJ的一个方面:它实现了一项经常被请求的特性,当一个异常被一个空的捕捉块淹没时,用它来发布一个警告。

pointcut resolvingATryStatement(TryStatement tryStatement, BlockScope inScope)
: execution(* TryStatement.resolve(..)) &&
this(tryStatement) &&
args(inScope,..);
after(TryStatement tryStatement, BlockScope inScope) returning
: resolvingATryStatement(tryStatement,inScope) {
if (tryStatement.catchBlocks != null) {
for (int i = 0; i < tryStatement.catchBlocks.length; i++) {
Block catchBlock = tryStatement.catchBlocks[i];
if (catchBlock.isEmptyBlock() ||
catchBlock.statements.length == 0) {
warnOnEmptyCatchBlock(catchBlock,inScope);
}
}
}
}
private void warnOnEmptyCatchBlock(Block catchBlock, BlockScope inScope) {
inScope.problemReporter()
.swallowedException(catchBlock.sourceStart(),
catchBlock.sourceEnd());
}
}

即使在这个实例中,这个方面只在代码库中建议了一个位置,但它除了JDT编译器的功能之外,还通过将这个AspectJ模块化,使得代码更加清楚了,也使得未来的维护人员非常清楚如何实现这项特性。涉及利用方面给领域建模的进一步详情,则是另一篇文章的主题了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章