AOP:基本想法 - 保持对象简单?

时间:2011-06-30 09:05:49

标签: java spring dependency-injection aop

我使用Spring Framework 3.0.5,我想了解Spring的基本原理。其中一个是AOP。

Spring框架的一个基本思想是保持对象本身简单并具有清晰的代码。

DI遵循这个基本想法。它提供了清晰的代码,对象本身可以非常简单。不必查看他们的依赖。

现在AOP怎么样?我的意思是,AOP的代码肯定更清晰,但AOP是否也有保持对象尽可能简单的基本思路?我不确定,这就是为什么我想知道其他一些意见: - )

提前致谢!

2 个答案:

答案 0 :(得分:4)

AOP的主要动机是将其用于所谓的横切关注,就像您需要在应用程序的基本所有部分中提供的功能一样,通常包括:

  • 登录
  • 验证
  • 审核
  • 事务性。

AOP允许您将这些功能提取到单独的类中,只需标记需要这些功能的类。

观看this精彩视频,了解主要想法。要回答你的问题,是的,这将有助于保持你的课程清洁,因为他们只会关心自己的功能,而不必一遍又一遍地提供样板代码。

答案 1 :(得分:3)

以下面的代码片段为例。 easy 方式:

@PersistenceContext
private EntityManager em;

@Transactional
public void save(Object obj) {
    em.persist(obj);
}

传统的方式(您可以使用EntityManager接口管理事务,但这不是重点):

@PersistenceContext
private EntityManager em;

@Resource
private AbstractPlatformTransactionManager transactionManager;

public void save(final Object obj) {
    new TransactionTemplate(transactionManager).execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus status)
        {
            em.persist(obj);
        }
    });
}

它与AOP有什么关系?事务管理是AOP最广泛使用的例子之一,Spring也不例外。前一代码片段使用@Transactional注释来使用方面应用事务划分,而后者则手动管理事务。看到好处?

关键是:使用方面来解决日志,分析等交叉问题。不要在方面构建业务逻辑。通过这种方式,您的bean保持清晰,而来自业务角度的不相关代码隐藏在方面中。

AOP也可让您轻松完成各种复杂的工作。以HTTP会话处理为例 - 使用session bean范围和AOP代理,您甚至无需实现就可以访问会话。

总结一下 - 当用于合适的工作时,它是很好的工具。