【发布时间】:2020-07-08 06:56:26
【问题描述】:
我有一个 Spring MVC Web 应用程序(基于 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 bean 的正常模式(单例模式)。只需将其设为 Spring bean,一切都会自动为您工作。请注意,您似乎在使用 ancient 教程,因为我个人使用 Spring 已有 10 年了,从未编写过使用
AbstractController的控制器,您通常 i> 想直接使用 Spring Boot Micrometer 工具而不是 statsd。
标签: java spring spring-mvc singleton statsd