sách gpt4 ai đã đi

spring-aop - 如何将 HttpServletRequest 注入(inject) Spring AOP 请求(自定义场景)?

In lại 作者:行者123 更新时间:2023-12-04 00:01:08 30 4
mua khóa gpt4 Nike

我知道围绕 Controller 方法编写 AOP 建议的标准方法,并且如果在 Controller 方法中声明,您可以访问 HttpServletRequest arg。

但我的情况是我有一个翻译服务,它目前是 session 范围的,维护用户的语言环境以进行翻译。我觉得这使服务有状态,而且我不希望它是 session 范围的,因为我认为它真的是单例的。但是有多个地方调用了翻译服务方法,因此我不想更改签名以在这些方法中添加请求/语言环境。问题是翻译服务方法的所有调用者都无权访问 HttpServletRequest(不是 Controller 方法)?我可以围绕翻译服务方法编写一个方面,并以某种方式神奇地访问 HttpServletRequest,而不管它在调用者的上下文中是否可用?

@Dịch vụ
public class TranslationService {
public void translate(String key) {
...
}
}

@Diện mạo
@Thành phần
public class LocaleFinder {
@PointCut("execution(* TranslationService.translate(..))")
private void fetchLocale() {}

@Around("fetchLocale()") // in parameter list
public void advice(JoinPoint joinpoint, HttpServletRequest request) { .... }
}

如果现在 translate 的调用者没有 HttpServletRequest,我不能在通知中获取请求吗?有解决方法吗?

1 Câu trả lời

Can I write an aspect around the translation service methods and somehow magically get access to HttpServletRequest regardless of whether it is available in the caller's context or not?



不容易。实际上,这需要很多努力。

最简单的方法是依靠 RequestContextHolder .在每个请求中, DispatcherServlet绑定(bind)当前 HttpServletRequestđến static ThreadLocal RequestContextHolder 中的对象.您可以在同一 Chủ đề 中执行时检索它和
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();

您可以在 advice() 中执行此操作方法,因此不需要声明参数。

关于spring-aop - 如何将 HttpServletRequest 注入(inject) Spring AOP 请求(自定义场景)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19271807/

30 4 0
Bài viết được đề xuất: angularjs - 如何动态地将模块注入(inject)主 Angular 应用程序模块
Bài viết được đề xuất: clojure - clojure 中的笛卡尔积
Bài viết được đề xuất: codeigniter - 在 opencart 中加载和使用模型
Bài viết được đề xuất: TYPO3 Fluid complex if条件
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com