zoukankan      html  css  js  c++  java
  • atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29

    atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29

     

     

    1三 绑定方式的介绍1

    2To接口,链式绑定,用的最多的1

    3toConstructor1

    4toInstance生成的都是单例对象的...3

    5toProvider生成非单例对象3

    5.2. 注解(Annotations)绑定3

    5.3. 实例绑定(str,int绑定)4

    5.4. 无目标绑定4

    6参考5

     

     

    重大的描述

    1. 三 绑定方式的介绍

    1. 在自定义的Module类中进行绑定

    1. configure方法中绑定

    1. 11 链式绑定

    2. 12 注解Annotations绑定

    1. 121 自己写Annotations的方式

    2. 122 使用Named的方式

    3. 13 实例绑定

    4. 14 Provider绑定

    5. 15 无目标绑定

    6. 16 指定构造函数绑定

    7. 17 Built-in绑定

    2. Provides方法中进行绑定

    2. 在父类型中进行绑定

    1. 1 ImplementedBy

    2. 2 ProvidedBy

     

    2. To接口,链式绑定,用的最多的

     

    作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

    转载请注明来源: http://www.cnblogs.com/attilax/

     

    3. toConstructor

     

    这种绑定方式主要用于不方便用注解@Inject修饰目标类型的构造函数的时候。比如说目标类型是第三方提供的类型,或者说目标类型中有多个构造函数,并且可能会在不同情况采用不同的构造函数。

    configure方法中,将一种类型绑定到另外一种类型的过程中,指定目标类型用那种构造函数生成对象

    configure方法中,将一种类型绑定到另外一种类型的过程中,指定目标类型用那种构造函数生成对象。 

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    public class BillingModule extends AbstractModule {

      @Override

      protected void configure() {

        try {

          bind(TransactionLog.class).toConstructor(

              DatabaseTransactionLog.class.getConstructor(DatabaseConnection.class));

        } catch (NoSuchMethodException e) {

          addError(e);

        }

      }

    }

     

    这种绑定方式主要用于不方便用注解@Inject修饰目标类型的构造函数的时候。比如说目标类型是第三方提供的类型,或者说目标类型中有多个构造函数,并且可能会在不同情况采用不同的构造函数。

     

    4. toInstance生成的都是单例对象的...

    toInstancenew object();

    5. toProvider生成非单例对象

     

    5.1.1.1.1. Provider绑定

    在下面会介绍基于@Provides方法的绑定。其实Provider绑定是基于@Provides方法绑定的后续发展,所以应该在介绍完基于@Provides方法绑定之后再来介绍,不过因为Provider绑定也是在configure方法中完成的,而本文又是按照绑定的位置来组织的,因为就把Provider绑定放在这了,希望大家先跳到后面看过基于@Provides方法的绑定再回来看这段。

    在使用基于@Provides方法绑定的过程中,如果方法中创建对象的过程很复杂,我们就会考虑,是不是可以把它独立出来,形成一个专门作用的类。Guice提供了一个接口:

     

     

     bd.bind(Connection.class).toProvider(new Provider<Connection>(){

     

    @Override

    public Connection get() {

    //SessionFactory sessionFactory = HibernateSessionFactory.getSessionFactory();

    //Connection c=SessionFactoryUtils.getDataSource(sessionFactory ).getConnection();

     try {

    return new Hb4JdbcX().getConnection();

    catch (SQLException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    throw new RuntimeException(e);

    }

    }});

    5.1. 注解(Annotations)绑定

    链式绑定针对于同样的类型都绑定到同一种目标类型时,非常好用,但是对于一个接口有多种实现的时候,链式绑定就不好区分该用哪种实现了。可以把Annotations绑定方式看作是链式绑定的一种扩展,专门用来解决这种同一个接口有多种实现的问题。Annotations绑定又可以分为两种,一种是需要自己写Annotations,另外一种则简化了一些。

     

    5.2. 实例绑定(str,int绑定)

    上面介绍的链式绑定是把接口的class对象绑定到实现类的class对象,而实例绑定则可以看作是链式绑定的一种特例,它直接把一个实例对象绑定到它的class对象上。

    [java] view plaincopy

    1. bind(String.class)  

    2.     .annotatedWith(Names.named("JDBC URL"))  

    3.     .toInstance("jdbc:mysql://localhost/pizza");  

    4. bind(Integer.class)  

    5.     .annotatedWith(Names.named("login timeout seconds"))  

    6.     .toInstance(10);  

     

     

    5.3. 无目标绑定

    无目标绑定是链接绑定的一种特例,在绑定的过程中不指明目标,如:

    [java] view plaincopy

    1. bind(MyConcreteClass.class);  

    2. bind(AnotherConcreteClass.class).in(Singleton.class);  

     

    如果使用注解绑定的话,就不能用无目标绑定,必须指定目标,即使目标是它自己。如:

    [java] view plaincopy

    1. bind(MyConcreteClass.class).annotatedWith(Names.named("foo")).to(MyConcreteClass.class);  

    2. bind(AnotherConcreteClass.class).annotatedWith(Names.named("foo")).to(AnotherConcret

     

     

    无目标绑定,主要是用于与被@ImplementedBy 或者 @ProvidedBy修饰的类型一起用。如果无目标绑定的类型不是被@ImplementedBy 或者 @ProvidedBy修饰的话,该类型一定不能只提供有参数的构造函数,要么不提供构造函数,要么提供的构造函数中必须有无参构造函数。因为guice会默认去调用该类型的无参构造函数

     

    5.3.1.1.1. Built-in绑定

    Built-in绑定指的是不用程序员去指定,Guice会自动去做的绑定。目前,Guice所支持的Built-in绑定只有对java.util.logging.Logger的绑定。个人感觉,所谓的Built-in绑定,只是在比较普遍的东西上为大家带来方便的一种做法。

    6. 参考

    Atitit.guice3 ioc 最佳实践 o9o 

     

    Google-Guice入门介绍 - Derekjiang的笔记簿 博客频道 - CSDN.NET.htm

  • 相关阅读:
    应该选取表中哪些字段作为索引?
    maven聚合(依赖聚合)
    maven(1)
    maven打包记录1
    tomcat 日志(2)
    tomcat日志(1)
    存储过程
    EXISTS的用法介绍
    学习笔记-移动设备的处理器指令集 armv6 armv7 armv7s arm64
    学习笔记-nil NULL NSNull Nil的区别
  • 原文地址:https://www.cnblogs.com/attilax/p/5093596.html
Copyright © 2011-2022 走看看