@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();
}
//...
}
}