我非常感谢有人帮助我理解这个javax示例代码,以及为什么@inject注释实际上是有用的/它所做的事情。下面的代码来自:来自此源的代码
class Stopwatch {
final TimeSource timeSource;
@Inject Stopwatch(TimeSource TimeSource) {
this.TimeSource = TimeSource;
}
void start() { ... }
long stop() { ... }
}首先,我认为(我希望)有一个错误,"TimeSource“参数应该是"timeSource",因为秒表类中的字段是CamelCase。
不过,我真正不明白的是@inject注释实际上在做什么!?它等同于这个构造函数吗?:
class Stopwatch {
final TimeSource timeSource;
Stopwatch(TimeSource timeSource) {
this.timeSource = timeSource;
}
}上面是我如何处理添加依赖项的方法,所以我希望我是正确的@inject关键字就是这样做的.还是我离得太远了?
发布于 2018-08-08 09:59:01
如果您已经了解了Spring的@Autowired注释,那么上面的代码就没有什么不同了。
class Stopwatch {
final TimeSource timeSource;
@Inject Stopwatch(TimeSource TimeSource) {
this.TimeSource = TimeSource;
}
void start() { ... }
long stop() { ... }
}在这里,@Inject表示在创建Stopwatch实例时,应该通过该构造函数实例化它,并传入一个可分配给TimeSource的实例。
与调用构造函数或工厂的程序员不同,称为依赖注入器的工具将依赖项传递给对象。
因此,如前所述,依赖注入器将确保在创建TimeSource实例时注入Stopwatch实例。
发布于 2020-07-29 08:26:10
迟答,但可能对其他人有帮助。@Inject注释本身不起任何作用。
您需要一个对注释起作用的框架。
例如Guice
Injector injector = Guice.createInjector();
YourObject yo = injector.getInstance(YourObject.class);注释在javax中以提供一个标准名称,因此理论上我可以将Guice替换为其他东西。
https://stackoverflow.com/questions/51733734
复制相似问题