美文网首页
[Guice] 6 作用域

[Guice] 6 作用域

作者: LZhan | 来源:发表于2019-08-13 22:41 被阅读0次

    关于上一章绑定的内容,当遇到绑定的对象,有泛型参数时,记得使用TypeLiteral,比如说想要将Cache<String,String>绑定到实现GuiceDemoCache上,则:

    bind(new TypeLiteral<Cache<String,String>>(){}).to(GuiceDemoCache.class);
    

    1、
    问题引出:

    image.png

    默认不是同一个,requestParser不是同一个没有问题,但是数据库连接dataBaseConnection只要创建一个就可以。

    image.png

    这种情况,由Provider的get方法得到的实例,是不确定的,这是SessionScope,同一个session内,就是同一个;那如果不是同一个session,就不一样了。


    2、选择作用域
    <1> 默认
    适用于一般实例,构造速度快,stateless(没有一些有状态的成员变量,一直都保持不变)
    <2> Singleton
    适用于Stateful的实例,构造速度慢的实例,必须线程安全,如:数据库连接,网络连接
    <3> Session/Request
    含有session/request信息的实例,stateful的实例,如SessionState等


    3、如何设定作用域?
    以singleton为例,
    <1> 可以在对应的需要绑定的实现类上加上注解@Singleton

    image.png

    <2> 在module中

    bind(new TypeLiteral<Cache<String,String>>(){})
    .to(GuiceDemoCache.class)
    .in(Singleton.class);
    

    <3> 通过Provides

    @Provides @Singleton Cache<String,String> getCache(){
         return new GuiceDemoCache();
    }
    

    相关文章

      网友评论

          本文标题:[Guice] 6 作用域

          本文链接:https://www.haomeiwen.com/subject/oeyijctx.html