@Inject注解@Inject注解可以出现在三种类成员之前:构造器、方法、属性1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19//构造器,不含参数的构造器也可以使用@Inject 注解
public MurmurMessage(Header header, Content content)
{
this.header = header;
this.content = content;
}
//方法
public void setContent(Content content)
{
this.content = content;
}
//属性
public class MurmurMessenger
{
private MurmurMessage murmurMessage;
//...
}@Qualifier注解用
@Qualifier注解区分同一类型MusicGenre的不用bean必须标记为
@Qualifier和@Retention(RUNTIME),以确保该限定注解运行时一直有效通常还会加上
@Documented注解,从而该实现就能加API的公共Javadoc中可以有属性
@Target注解可以限定其使用范围1
2
3
4
5
6
7
8
9
10
11
12
13
(RUNTIME)
public MusicGenre
{
Genre genre() default Genre.TRANCE;
public enum GENRE { CLASSICAL, METAL, ROCK, TRANCE }
}
public class MetalRecordAlbumns
{
(GENRE.METAL) Genre genre;
}@Named注解将
@Named和@Inject一起使用,符合指定名称并且类型正确的对象会被注入1
2
3
4
5
6
7//注入了名称为“murmur”和“broadcast”的两个MurmurMessage对象
public class MurmurMessenger
{
("murmur") private MurmurMessage murmurMessage;
("broadcast") private MurmurMessage broadcastMessage;
//...
}@Singleton注解1
2
3
4
5//单例模式
public MurmurMessage
{
MessageHeader defaultHeader;
}接口Provider
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import com.google.inject.Inject;
import com.google.inject.Provider;
class MurmurMessage
{
MurmurMessage (Provider<Message> messageProvider)
{
Message msg1 = messageProvider.get();
if (someGlobalCondition)
{
Message copyOfMsg1 = messageProvider.get();
}
//...
}
}