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