了解 spring 单例在启动时加载实体

Em *_* Ae 4 java spring multithreading spring-mvc

我想实现一个功能,在部署时,我应该从数据库加载对象列表。该数据库已经完成了相应的实现,正在运行中使用。

鉴于我是 Spring 的新手,我正在尝试了解 Spring 的不同功能,我可以利用这些功能来实现此功能。如果我没有使用 Spring,我会

  • 创建了一个线程安全的单例类
  • 通过 servlet 生命周期在应用程序加载时加载该类
  • 加载该单例类中的所有内容并覆盖现有的数据库类,以在发出查询之前检查该单例类。这样,仅当此类由于某种原因未加载时才会发出查询。

现在,春天来了,我很迷茫。我一直在阅读不同的文章并试图找到一些指导。首先,我应该用它@Component来创建类单例吗?Spring会考虑线程安全吗?

其次,这堂课是Service春季课吗?我必须用 注释它吗@Service

第三,我应该@PostConstruct在启动时加载这个类吗?或者还有其他更好的选择?

use*_*685 5

以下是您的问题的答案:

首先,我应该使用@Component来使类成为单例吗?Spring会考虑线程安全吗?

@Component用于基于 XML 的 Spring 配置中的组件扫描来创建 Spring Bean。Bean 将创建任何类的单例实例。

其次,这个类会是 Spring 的 Service 类吗?我必须用 注释它吗@Service

@Service无非是 的专业化@Component。如果您继续使用@Service@Repository替换它们,那就完全没问题了@Component

第三,我应该@PostConstruct在启动时加载这个类吗?或者还有其他更好的选择?

@PostConstructbean 创建后仅运行一次。如果您想在应用程序第一次启动时将数据从数据库加载到缓存等,则可以使用它。