java理解javax。注入示例代码?
我非常感谢有人帮助我理解这个javax示例代码以及@inject注释的实际用途。以下代码来自: Code From this Source
class Stopwatch {
final TimeSource timeSource;
@Inject Stopwatch(TimeSource TimeSource) {
this.TimeSource = TimeSource;
}
void start() { ... }
long stop() { ... }
}
首先,我认为(我希望)有一个输入错误,“TimeSource”参数应该是“TimeSource”,因为Stopwatch类中的字段是CamelCase
但我真正不明白的是@inject注释实际上在做什么!?它是否等效于此构造函数
class Stopwatch {
final TimeSource timeSource;
Stopwatch(TimeSource timeSource) {
this.timeSource = timeSource;
}
}
上面是我如何处理添加依赖项的,所以我希望我是正确的,@inject关键字就是这样做的。。。还是我太离谱了
# 1 楼答案
如果您已经理解了Spring的
@Autowired
注释,那么上面的代码也一样@Autowired
是一个特定于Spring的注释,@Inject
来自Java依赖注入规范这里,
@Inject
表示当创建Stopwatch
的实例时,应该通过该构造函数实例化它,并传入一个可分配给TimeSource
的实例因此,如本文所述,依赖项注入器将确保在创建
Stopwatch
的实例时注入TimeSource
的实例# 2 楼答案
迟回答,但可能有助于其他人。 @Inject注释本身不做任何事情
您需要一个作用于注释的框架
例如Guice
注释是在javax中提供标准名称的,因此理论上我可以用Guice交换其他东西