如何在整个 Spring MVC Web 应用程序中创建对象的单个实例?
How to create a single instance of object across entire Spring MVC web application?
我有一个 Spring MVC 网络应用程序(XML 基于无注释)。我只想在我的应用程序启动时创建 statsDClient 对象的一个实例,并在我的整个应用程序中使用它。我正在尝试如下所示:
import com.timgroup.statsd.NonBlockingStatsDClient;
import com.timgroup.statsd.StatsDClient;
Public class Helper(){
private static final StatsDClient statsDClient = new NonBlockingStatsDClient("prefix", "localhost", 8125);
private Helper(){}
public static StatsDClient getInstance() {
return statsDClient;
}
}
稍后在我的控制器中,我通过以下方式获取 statsDClient 对象:
public class HelpController extends AbstractController {
private StatsDClient statsDClient = Helper.getInstance();
protected ModelAndView handleRequestInternal(
HttpServletRequest request,
HttpServletResponse response) throws Exception {
statsDClient.someMethod();
}
但是,这似乎正在创建一个新的 statsDClient 对象,我在不同的控制器中使用它。你能指导我哪里出错了吗?
标记为静态的变量仅在内存中创建一次。您可以创建一个 bean 并将其注入到任何需要的地方。
spring 中的 Beans 默认是单例的,这意味着在整个应用程序中,spring 容器只会创建并管理一个共享实例。
因此,在您的情况下,您不需要将 statsDClient 指定为单个实例,
你可以做类似的事情
确保 statsDClient 只会被实例化一次
但它只是多余的
我有一个 Spring MVC 网络应用程序(XML 基于无注释)。我只想在我的应用程序启动时创建 statsDClient 对象的一个实例,并在我的整个应用程序中使用它。我正在尝试如下所示:
import com.timgroup.statsd.NonBlockingStatsDClient;
import com.timgroup.statsd.StatsDClient;
Public class Helper(){
private static final StatsDClient statsDClient = new NonBlockingStatsDClient("prefix", "localhost", 8125);
private Helper(){}
public static StatsDClient getInstance() {
return statsDClient;
}
}
稍后在我的控制器中,我通过以下方式获取 statsDClient 对象:
public class HelpController extends AbstractController {
private StatsDClient statsDClient = Helper.getInstance();
protected ModelAndView handleRequestInternal(
HttpServletRequest request,
HttpServletResponse response) throws Exception {
statsDClient.someMethod();
}
但是,这似乎正在创建一个新的 statsDClient 对象,我在不同的控制器中使用它。你能指导我哪里出错了吗?
标记为静态的变量仅在内存中创建一次。您可以创建一个 bean 并将其注入到任何需要的地方。
spring 中的 Beans 默认是单例的,这意味着在整个应用程序中,spring 容器只会创建并管理一个共享实例。
因此,在您的情况下,您不需要将 statsDClient 指定为单个实例,
你可以做类似的事情 确保 statsDClient 只会被实例化一次 但它只是多余的