[Day 3] Java 程序员修炼之道学习笔记

  1. @Inject注解

    @Inject注解可以出现在三种类成员之前:构造器、方法、属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //构造器,不含参数的构造器也可以使用@Inject 注解
    @Inject public MurmurMessage(Header header, Content content)
    {
    this.header = header;
    this.content = content;
    }

    //方法
    @Inject public void setContent(Content content)
    {
    this.content = content;
    }

    //属性
    public class MurmurMessenger
    {
    @Inject private MurmurMessage murmurMessage;
    //...
    }
  2. @Qualifier注解

    @Qualifier注解区分同一类型MusicGenre的不用bean

    必须标记为@Qualifier@Retention(RUNTIME),以确保该限定注解运行时一直有效

    通常还会加上@Documented注解,从而该实现就能加API的公共Javadoc中

    可以有属性

    @Target注解可以限定其使用范围

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Documented
    @Retention(RUNTIME)
    @Qualifier
    public @interface MusicGenre
    {
    Genre genre() default Genre.TRANCE;
    public enum GENRE { CLASSICAL, METAL, ROCK, TRANCE }
    }

    public class MetalRecordAlbumns
    {
    @Inject @MusicGenre(GENRE.METAL) Genre genre;
    }
  3. @Named注解

    @Named@Inject一起使用,符合指定名称并且类型正确的对象会被注入

    1
    2
    3
    4
    5
    6
    7
    //注入了名称为“murmur”和“broadcast”的两个MurmurMessage对象
    public class MurmurMessenger
    {
    @Inject @Named("murmur") private MurmurMessage murmurMessage;
    @Inject @Named("broadcast") private MurmurMessage broadcastMessage;
    //...
    }
  4. @Singleton注解

    1
    2
    3
    4
    5
    //单例模式
    public MurmurMessage
    {
    @Inject @Singleton MessageHeader defaultHeader;
    }
  5. 接口Provider

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import com.google.inject.Inject;
    import com.google.inject.Provider;

    class MurmurMessage
    {
    @Inject MurmurMessage (Provider<Message> messageProvider)
    {
    Message msg1 = messageProvider.get();
    if (someGlobalCondition)
    {
    Message copyOfMsg1 = messageProvider.get();
    }
    //...
    }
    }
  6. Google Guice使用入门

  7. Github google/guice wiki