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



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

spring框架的一个基本思想是保持对象本身的简单性和清晰的代码。

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

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

提前感谢!

AOP的主要动机是将其用于所谓的交叉关注,因为在应用程序的基本所有部分中都需要提供功能,通常包括:

  • 测井
  • 身份验证
  • 审计
  • 交易性

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

观看这段精彩的视频,了解大意。为了回答你的问题,是的,保持类的整洁会有很大帮助,因为它们只关心自己的功能,不必一遍又一遍地提供样板代码。

以以下代码片段为例。简单方式:

@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会话处理为例——使用sessionbean作用域和AOP代理,您甚至可以在没有意识到的情况下访问会话

总之,当用于正确的工作时,它是一个很好的工具。

最新更新