Guice vs AspectJ

时间:2010-08-19 20:39:32

标签: java guice aspectj

几个月前我和GUice合作,现在当我回到它时,我发现我必须重读Guice文档和示例,以了解我对我的代码做了什么。

然而,当我看到AspectJ时,它太直观了。它是Java语言的直观扩展。我觉得我可以坐下来立即编写AspectJ代码。

因此,我很想放弃对Guice的追求,并选择AspectJ。特别是Spring正在生成AspectJ代码。

Guice的哪些特征在AspectJ之上会阻止我放弃Guice?

为什么Google不会放弃Guice并改用AspectJ?

反之亦然,除了它的直观性之外,AspectJ的哪些特性会鼓励我放弃Guice?

如果允许我在这里的问题中“编织”,是什么阻止了Java语言与AspectJ合并或在未来的Java版本中提供类似的“方面”?

注意触发快乐删除 - azillas,我意识到这个问题可能过于笼统 - 但如果我知道要进一步具体要求什么,那么我甚至不需要问但是只是google / bing,因为我知道我不知道。正如你所看到的,我的Guice知识已经严重降级,我甚至无法识别自己的笔迹

3 个答案:

答案 0 :(得分:19)

彼得说,Guice和AspectJ完全不同。 Guice进行依赖注入,节省大量工厂编写,同时使代码灵活,易于测试并添加有用的东西,如作用域。它也恰好允许通过方法拦截来实现AOP的简单,简单的方法(通过编程方式配置截获的方法,而不是DSL)。这实际上只是它提供的另一个奖励,而不是它的核心目标。

至于为什么AspectJ没有合并到Java中...我觉得很多人都不希望这种情况发生。 AOP很强大,但危险。虽然它对某些用途来说当然很棒,并且在这些情况下大大简化了代码,如果过度使用它可能会让你更难理解程序中发生的事情。

答案 1 :(得分:7)

根据我的看法,AspectJ和Guice做了不同的事情。

Guice注入依赖关系,AspectJ处理横切关注点。

如果使用spring,那么使用Guice的价值确实较小,因为重叠太多,然后Spring / AspectJ的共生是一个引人注目的解决方案。

由于其重量较轻,我非常喜欢非弹簧项目。

答案 2 :(得分:2)

Spring建立在依赖注入和面向方面的编程之上。

Guice是一个依赖注入引擎。

AspectJ是一个面向方面的引擎。

看到区别? Guice和AspectJ将是互补的; Spring已经兼得。

应该提到的是,除了AspectJ之外,Spring还支持自己的基于拦截器的AOP,它不需要字节代码操作。