【发布时间】:2016-07-05 15:04:38
【问题描述】:
我正在使用 Spring MVC (Spring Boot) 实现一个 REST 服务,并且我正在创建一些 Aspects 来处理该服务的一些交叉功能。
一个例子是这样的服务方法:
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...
}
如您所见,我有两个方法对同一个用户对象做不同的事情,所以即使用户已经在 main 方法中检索到,我也必须执行两次相同的查询。
请注意,对于我的服务层中的某些方法,我有几个方面由单个方法调用触发,这会使用户检索数倍增。
所以我想知道:有没有办法至少在 REST(无状态)应用程序的各个方面之间共享对象?您能否建议一种不同的方法来最大限度地减少这些情况下的数据访问?
【问题讨论】:
-
“所以我必须执行两次相同的查询” 这取决于您如何加载数据。也许用户已经被缓存了。否则你可以缓存它,例如使用
@Cachable。
标签: java spring spring-mvc aop