我们正在开发一个Web应用程序,我们在DAO类中记录所有数据库调用的输入和输出。一个例子是:
@Override
public List<Long> findUsers(final List<Long> userIds) {
LOGGER.info("findUsers: finding user ids by followeeId {} ", userIds);
... // hibernate DB call
LOGGER.info("findUsers: number of ids founds are {}", userIdList.size());
此代码将出现在所有DAO类中,此类的数量大约为100,并且可能会更高。
我的问题是我们是否应该以相同的方式继续记录信息,还是应该使用Spring-AspectJ实现? - 对于所有此类方法,我们将为@Before
和@After
定义一个方面。此方面将调用记录器并记录所需的信息。
实施Spring-AspectJ是否会受到性能影响?任何指针都表示赞赏。
我已经完成了以下SO问题,但是对于上面引用的示例需要更加明确。
答案 0 :(得分:3)
使用AOP会给你一个小的性能损失,多少取决于你如何应用AOP(代理或编织)以及你在你方面做了什么。我建议使用Springs CustomizableTraceInterceptor
或者如果你也感兴趣(或者对表现更感兴趣的话,AbstractMonitoringInterceptor
的子类之一可以节省你自己的实现。
我不会按照您的方式登录,因为它很容易忘记,如果您想要更改某些内容(或禁用日志记录),您必须更改这100个类而不是1或仅配置。 / p>
答案 1 :(得分:0)
如果你使用spring aop会降低你的性能,除非你使用带有aspectj的弹簧,它会更好地检查这里 http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html