java - 在 REST 服务中使用 AOP 进行数据检索优化

标签 java spring spring-mvc aop

我正在使用 Spring MVC (Spring Boot) 实现 REST 服务,并创建一些 Aspect 来处理该服务的一些交叉功能。

一个例子是这样的服务方法:

public void doSomethingWithUser(int userId){
    // retrieve user from DB and do something...
}

在我的Aspect类中,有一个像这样的方法:

@Around("execution(* com.test.myrestsvc.services.MyService.doSomethingWithUser(..))")
public void aroundDoSomething(ProceedingJoinPoint pjp) throws Throwable {
    // retrieve user (the same retrieved in the method) and do something else...
}

正如您所看到的,我有两个方法对同一个用户对象执行不同的操作,因此即使已经在主方法中检索了用户,我也必须执行相同的查询两次。

请注意,对于我的服务层中的某些方法,单个方法调用会触发多个方面,这会导致用户检索数倍增加。

所以我想知道:有没有办法至少在 REST(无状态)应用程序的各个方面之间共享对象?您能否建议一种不同的方法来最大限度地减少这些情况下的数据访问?

最佳答案

你可以尝试使用Spring级别的缓存,这里很简单tutorial ,但要小心并额外注意缓存逐出策略。

如果您将 Spring Data JPA 与 Hibernate 或 EclipseLink 一起使用,您还可以尝试在 JPA 实现提供程序中启用二级缓存:Example

关于java - 在 REST 服务中使用 AOP 进行数据检索优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38186614/

相关文章:

java - Spring MVC Controller 映射未注册

java - Spring @PostConstruct 依赖于@Profile

java - 您将如何提高此正则表达式的效率

java - jar 文件到 web 服务

java - 如何将 BorderBehavior 与 ajax 重新渲染结合使用

spring - BeanFactory 和 ApplicationContext 的区别?

java - @MatrixVariable注解的pathVar属性在Spring中如何工作?

java - 仅使用 XML 配置的 Spring RESTful Web 服务

java - 如何在 spring mvc 中验证整数或长整型

java - 使用 echo 命令将八进制字符串写为 ASCII 字符