在实现Jersey中的单例资源时,使用@Singleton或getSingletons()?

8

我有一个需要作为Restful WS公开的资源。如果我必须将其设置为单例模式,那么推荐和建议的方式是什么:

1. 使用@Singleton注解资源类

或者

2. 在我的应用程序类实现中实现getSingletons()方法并在其中实例化资源

   public class RestApplication extends Application {

    private Set<Object> singletons = new HashSet<Object>();

    public RestApplication() {
        singletons.add(new PlayerResource());
    }

    @Override
    public Set<Class<?>> getClasses() {
        return null;
    }

    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }
}

我尝试了两种方法,发现它们都创建了一个资源类(在这种情况下是PlayerResource)的单例实例。


这里有一个关于单例模式的类似问题,询问最佳实现方式。个人而言,我会显式地编写单例模式,而不是使用注释。请参见此处:https://dev59.com/YXRC5IYBdhLWcg3wCMrX - adamjmarkham
@AdamJMTech - 我的问题与Jersey/JAX-RS有关。只是想知道它们中的哪一个是首选方式。或者它们各自带来了什么优势。 - Dhanush Gopinath
1个回答

0

大部分技术问题你需要知道的已经在这里得到了解答。

对于其余的问题,只要你在整个代码库中保持一致,就不太重要了。

不使用注释的好处是,如果Jersey没有提供模块需要资源,它将获得相同的单例。(比如,如果你希望任何第三方插件与此资源交互)

使用注释的好处是,你可以让Jersey为你处理烦人/繁琐的事情。(比如,如果你使用任何可关闭的资源,Jersey会清理资源。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接