在应用程序的生命周期中,您在哪里存储持久性内存值(非db)?

时间:2011-06-01 15:48:27

标签: java spring spring-mvc

假设我想在实例化Spring应用程序时设置变量:

String timeUp = new Date().toString();

我希望能够从我的所有应用程序的bean中访问此值,但我不想将其存储在数据库中。我只想将它保存在应用程序中的bean中,该bean可以从应用程序中的所有其他bean访问。这怎么可能?

7 个答案:

答案 0 :(得分:2)

如果所有内容都在同一台计算机上,您可能需要使用singleton。这是一个单一的实例,一切都可以轻松访问和调用。

对于长期存储,如果数据库不是一个选项,您可能希望将serialize您的bean写入文件,或者只是编写自己的文件格式并输出到该文件。

答案 1 :(得分:2)

默认情况下,Spring Beans是Singletons。所以只需为此创建一个bean。

@Component
public class TimeUp {
  private final String _timeUp = new Date().toString();
  public String getTimeUp() { _timeUp };
}

然后将此bean注入您需要的地方。

@Component
public class Whatever {
  @Autowired TimeUp timeUp;

  public void useTimeUp() {
     System.out.println(timeUp.getTimeUp());
  }
}

答案 2 :(得分:1)

ContextListener的{​​{1}}方法初始化的单身人士将是我的第一个接听点。

答案 3 :(得分:0)

这是单身人士的经典用法。如果您只有其中的一部分,则可以为每个值创建一个单例。如果你有很多这些,你可以写一个'服务'来设置和查找值。

春天,你可以这样做:

import org.springframework.beans.factory.FactoryBean;

public class TimeUp implements FactoryBean<String> {
  private final String _value = new Date().toString();

  public String getObject() {
    return _value;

  public Class<?> getObjectType() {
    return String.class;
  }

  public boolean isSingleton() {
    return true;
  }
}

然后在Spring,您只需:

<bean id="timeUp" class="example.TimeUp"/>

答案 4 :(得分:0)

这样做的一种方法是让一个servlet类或过滤器类具有Date类型的公共静态最终成员,并在声明行上将其设置为新的日期对象。然后你可以做“servlet类名(点)公共成员名称”来访问这个值。

如果在servlet中执行此操作,则必须将web.xml中的servlet声明为“load-on-startup”servlet。否则在第一次使用servlet之前它不会得到它的日期值,这不是你想要的那样:)

答案 5 :(得分:0)

如果您实际上只是希望应用程序正常运行,那么您应该可以使用以下

RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
long uptimeInMillis = mx.getUptime();

如果您正在寻找更抽象的答案,那么Chris给出了一个很好的解决方案。

答案 6 :(得分:0)

您可以使用Singleton:

public class Environment {

    private final long startTime = ManagementFactory.getRuntimeMXBean().getStartTime();

    public long getStartTime() {
        return this.startTime;
    }


    private static final Environment SINGLETON = new Environment();

    private Environment() {
        //nop
    }

    public static Environment getInstance() {
        return SINGLETON;
    }
}