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

Java 在应用程序的生命周期中,您在何处存储持久内存值(非db)?,java,spring,spring-mvc,Java,Spring,Spring Mvc,假设我想在实例化Spring应用程序时设置一个变量: String timeUp = new Date().toString(); 我希望能够从我的应用程序的所有bean中访问此值,但我不想将其存储在数据库中。我只想将它保存在应用程序中的一个bean中,该bean可以从应用程序中的所有其他bean访问。这是怎么可能的?如果所有设备都在同一台机器上,您可能需要使用一个。它是一个单一的实例,任何东西都可以轻松访问和调用 对于长期存储,如果数据库不是一个选项,您可能希望将bean转换为一个文件,或者

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

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

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

如果所有设备都在同一台机器上,您可能需要使用一个。它是一个单一的实例,任何东西都可以轻松访问和调用


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

如果所有内容都在同一台机器上,您可能希望使用。它是一个单一的实例,任何东西都可以轻松访问和调用


对于长期存储,如果不选择数据库,您可能希望将bean转换为文件,或者只需编写自己的文件格式并将其输出。

这是单例的经典用法。如果只有其中的几个,则可以为每个值创建一个单例。如果你有一堆这些,你可以写一个“服务”,在那里你可以设置和查找值

在春季,您可以执行以下操作:

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;
  }
}
import org.springframework.beans.factory.FactoryBean;
公共类TimeUp实现FactoryBean{
私有最终字符串_值=新日期().toString();
公共字符串getObject(){
返回_值;
公共类getObjectType(){
返回字符串.class;
}
公共布尔isSingleton(){
返回true;
}
}
然后在春天,你只需做:

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

这是单例的经典用法。如果只有其中几个,则可以为每个值创建一个单例。如果有一组单例,则可以编写一个“服务”,用于设置和查找值

在春季,您可以执行以下操作:

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;
  }
}
import org.springframework.beans.factory.FactoryBean;
公共类TimeUp实现FactoryBean{
私有最终字符串_值=新日期().toString();
公共字符串getObject(){
返回_值;
公共类getObjectType(){
返回字符串.class;
}
公共布尔isSingleton(){
返回true;
}
}
然后在春天,你只需做:

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

一种方法是让您的一个servlet类或筛选器类拥有一个类型为Date的公共静态最终成员,并在声明行将其设置为一个新的日期对象。然后您可以执行“servlet类名(dot)公共成员名”来访问此值


如果在servlet中执行此操作,则必须将web.xml中的servlet声明为“启动时加载”servlet。否则,在第一次使用该servlet之前,它不会获得其日期值,而这并不是您真正想要的:)

一种方法是让您的一个servlet类或筛选器类具有一个类型为date的公共静态final成员,并在声明行将其设置为一个新的日期对象。然后您可以执行以下操作“servlet类名(dot)公共成员名”来访问此值


如果在servlet中执行此操作,则必须将web.xml中的servlet声明为“启动时加载”"servlet。否则,在第一次使用该servlet之前,它不会获得其日期值,而这并不是您真正想要的:)

ContextListener
contextInitialized
方法中初始化的单例将是我的第一个调用点。

ContextListener
contextIn中初始化的单例初始化的
方法将是我的第一个调用点。

如果你真的只想让应用程序正常运行,你应该能够使用以下方法

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

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

如果你真的只想让应用程序正常运行,你应该能够使用以下方法

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

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

你可以使用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;
    }
}

您可以使用单例:

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;
    }
}

默认情况下,Springbean是单例的,因此只需为此创建一个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());
  }
}

默认情况下,Springbean是单例的,因此只需为此创建一个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());
  }
}