【发布时间】:2019-06-01 13:56:12
【问题描述】:
我有一些在 Spring Boot 应用程序中通用的数据对象 - 一个是登录的 employee 对象,另一个是 category。我创建了一个 @Component 类,其中包含这些静态变量。这样我什至不必自动装配它们。它们可以像CurrentContext.employee 一样直接在控制器中使用。
@Component
public final class CurrentContext {
public static Category currentCategory;
public static Employee employee;
@Autowired
private CategoryService categoryService;
@Autowired
private EmployeeService employeeService;
@EventListener
public void onApplicationEvent(ContextRefreshedEvent event) {
currentCategory = categoryService.getCategory();
}
@EventListener
public void onLoginSuccess(InteractiveAuthenticationSuccessEvent event) {
employee = employeeService.getEmployeeByUserId(((MyUserDetails) event.getAuthentication().getPrincipal()).getUserId());
}
}
这是正确的方法吗?请建议是否有更好的方法来处理共享数据
编辑
一些背景知识——我需要当前登录的employee 和category,这对所有员工都是通用的。所以我在我的控制器中 autowired employeeService 和 categoryService 并使用它们来获取数据。它们几乎在我的所有控制器方法中都是必需的,所以我想创建一个它们的 bean,以便我直接在我的控制器中使用它们并节省频繁的数据库调用。
【问题讨论】:
-
employee对于每个登录用户应该不同吗?如果是,并且您以这种方式这样做,那么您总是会得到相同的员工..... -
同意评论。您是否开发单用户应用程序?
-
正如您正确提到的肯,这对我来说是一个重大失败,因为同一员工会为每个用户加载。大卫,这是一个多用户应用程序。那么我该如何解决它,以便每个用户都加载他们的详细信息?
标签: spring-boot