在Spring中实现一个单例bean

时间:2012-07-28 16:19:39

标签: spring spring-mvc singleton

我正在尝试使用Spring为我的网站创建一个缓存类,并将以下代码添加到我的applicationContect.xml文件中:

<bean id="SiteCache" class="Cache.SiteCache">

我不确定如何初始化这个类。我是否需要自己初始化它,或者当网站加载时Spring会处理它吗?如果是这样,我将如何接受构造函数中的参数?

我希望这个类大部分时间都可以使用,作为访问变量来填充站点的一种更快捷的方法,但我需要一种方法来检查是否有一个实例,所以我可以加载否则来自源的XML文件。

在春天实现缓存的最佳方法是什么?

非常感谢,

3 个答案:

答案 0 :(得分:5)

  

我不确定如何初始化这个类。

默认情况下(提供你的定义)Spring将只创建一个bean实例,并在其他代码需要的地方使用它。

  

我如何接受构造函数中的参数?

结帐4.4.1.1 Constructor-based dependency injection

<bean id="foo" class="x.y.Foo">
  <constructor-arg ref="bar"/>
  <constructor-arg value="42"/>
</bean>

4.4.2.7 XML shortcut with the c-namespace

<bean id="foo" class="x.y.Foo" c:_0-ref="bar" c:_1-ref="baz">
  

在春天实现缓存的最佳方法是什么?

使用内置Spring cache abstraction是个不错的开始。

答案 1 :(得分:0)

  

在春天实现缓存的最佳方法是什么?

在实现缓存方面,我建议使用现有的Cache实现,例如EhCache或类似的Spring cache abstraction

这使得缓存就像注释应该使用@Cacheable访问缓存的方法一样简单。 Spring将在执行方法之前尝试使用缓存。

虽然编写自己的缓存看起来很简单,但最难的部分始终是缓存失效。

答案 2 :(得分:0)

似乎所有必要的是在缓存类的构造函数中加载XML文件。我甚至不需要最后定义一个bean,只需在我的GET / POST方法中为每个控制器接受它就足以使缓存类保持单一。这样,XML文件只加载一次,并在构建站点时保存到缓存对象中。之后,可以使用缓存对象来更轻松地访问。

感谢您提供其他建议,但它们在更复杂的系统上似乎更有效,结果发现我并不是真的需要这一切。我也有一个粗略的想法,只需要一点提醒!