我非常感谢有人帮助我理解这个 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 关键字的做法......还是我离题了?
最佳答案
如果您了解 Spring 的 @Autowired
注解,那么上面的代码没有什么不同。@Autowired
是 Spring 特定的注解,@Inject
来自 Java 依赖注入(inject)规范
class Stopwatch {
final TimeSource timeSource;
@Inject Stopwatch(TimeSource TimeSource) {
this.TimeSource = TimeSource;
}
void start() { ... }
long stop() { ... }
}
这里,@Inject
表示当创建 Stopwatch
的实例时,应该通过该构造函数实例化它,并传入一个可分配给 TimeSource
的实例
Instead of the programmer calling a constructor or factory, a tool called a dependency injector passes dependencies to objects
因此,如此处所述,依赖项注入(inject)器将确保在创建 Stopwatch
实例时注入(inject) TimeSource
实例。
关于java - 了解 javax.inject 示例代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51733734/