java - 了解 javax.inject 示例代码吗?

标签 java spring

我非常感谢有人帮助我理解这个 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/

相关文章:

java - 我可以将匿名类或内部类编译成单个 java .class 文件吗?

java - 从字符串创建变量名?

java - Recycler View 线性布局管理器返回 null

java - 数据库中的坐标比较

javascript - 测试类无法读取consul配置

java - 悲观锁定因 ObjectOptimisticLockingFailureException 而失败

java - 如何在开始和结束时间戳日期之间创建一小时的时间段?

java - 如何使用java中的套接字从服务器向特定客户端发送字符串消息?

java - Spring 3.0 的 Google App Engine 实体管理器配置

java - 有没有一种 Spring 方法来检查网页是否仍然存在?