了解Spring Singleton在启动时加载实体


问题内容

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

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

  • 创建一个线程安全的Singleton类
  • 通过Servlet生命周期在应用程序加载时加载该类
  • 在发出查询之前,加载该Singleton类中的所有内容并覆盖现有的db类以检查此Singleton类。这样,仅当出于某些原因未加载此类时才发出查询。

现在,在春天,我很困惑。我一直在撰写不同的文章,并试图找到一些建议。首先,我应该使用@Component单例课程吗?弹簧会保护螺纹安全吗?

其次,这个班会成为Servicespring班吗?我必须用它注释@Service吗?

第三,我应该@PostConstruct在启动时用来加载此类吗?还是还有其他更好的选择?


问题答案:

这是您的问题的答案:

首先,我应该使用@Component来使类成为单例吗? 弹簧会保护螺纹安全吗?

@Component用于基于XML的Spring Configuration中的组件扫描,以创建Spring
Bean。Bean将创建任何类的Singleton实例。

其次,这个课程会成为spring的服务课程吗? 我必须用注释@Service吗?

@Service只是的专业化而已@Component。这是完全没问题,如果你继续使用@Service@Repository或替换它们@Component

第三,我应该@PostConstruct在启动时使用该类吗?还是还有其他更好的选择?

@PostConstruct在bean创建之后将仅运行一次。如果您希望在应用程序首次启动时将数据从数据库加载到缓存等中,则可以使用它。