了解spring singleton在启动时加载实体

时间:2016-02-02 17:54:42

标签: java spring multithreading spring-mvc

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

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

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

现在,在春天,我很困惑。我已经阅读了不同的文章并试图找到一些指示。首先,我应该使用@Component来制作类单身人士吗?春天会照顾线程安全吗?

其次,这个班级是春天的Service班吗?我是否必须使用@Service对其进行注释?

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

1 个答案:

答案 0 :(得分:2)

以下是您的问题的答案:

首先,我应该使用@Component来制作类单例吗?春天会照顾线程安全吗?

@Component用于基于XML的Spring Configuration中的Component Scaning来创建Spring Bean。 Bean将创建任何类的Singleton实例。

其次,这个班级是春天的服务类吗?我是否必须使用@Service注释?

@Service只是@Component的专业化。如果您继续使用@Service@Repository或将其替换为@Component,则完全没问题。

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

在创建bean之后,

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