了解javax.inject示例代码?

时间:2018-08-07 19:02:29

标签: java spring

非常感谢有人帮助我理解此javax示例代码以及@inject批注实际上有用/做什么的原因。下面的代码来自: documentation

Dim conn As Object, db As Object

Set conn = CreateObject("DAO.DBEngine.120")
Set db = conn.OpenDatabase("C:\MyStuff\MyDataBase.mdb")

db.Execute "Delete_Query1"
db.Execute "Delete_Query2"
db.Execute "Delete_Query3"

Set db = Nothing
Set conn = Nothing

首先,我想(我希望)有一个错字,“ TimeSource”参数应该确实是“ timeSource”,因为Stopwatch类中的字段是CamelCase。

我真正不明白的是@inject注释实际上在做什么!?等效于此构造函数吗?:

class Stopwatch {
 final TimeSource timeSource;
 @Inject Stopwatch(TimeSource TimeSource) {
   this.TimeSource = TimeSource;
 }
 void start() { ... }
 long stop() { ... }
}

以上是我处理添加依赖项的方式,所以我希望我是对的,这就是@inject关键字的实现方式...还是我可以解决?

2 个答案:

答案 0 :(得分:0)

如果您了解了Spring的 3 12 LOAD_FAST 0 (self) 14 LOAD_ATTR 1 (foo) 16 LOAD_FAST 0 (self) 18 LOAD_ATTR 2 (bar) 20 BUILD_TUPLE 2 22 LOAD_FAST 1 (other) 24 LOAD_ATTR 1 (foo) 26 LOAD_FAST 1 (other) 28 LOAD_ATTR 2 (bar) 30 BUILD_TUPLE 2 32 COMPARE_OP 2 (==) 34 RETURN_VALUE 批注,那么上面的代码也没什么不同。@Autowired是Spring特定的批注,@Autowired来自Java Dependency Injection规范

@Inject

此处,class Stopwatch { final TimeSource timeSource; @Inject Stopwatch(TimeSource TimeSource) { this.TimeSource = TimeSource; } void start() { ... } long stop() { ... } } 表示创建@Inject的实例时,应通过该构造函数实例化该实例,并传入可分配给Stopwatch的实例

  

不是程序员调用构造函数或工厂,而是工具   所谓的依赖注入器将依赖传递给对象

因此,如此处所述,依赖项注入器将确保在创建TimeSource的实例时注入TimeSource的实例。

答案 1 :(得分:0)

最新答案,但可能会帮助其他人。 @Inject注释本身不会执行任何操作。

您需要一个可对注释执行操作的框架。

例如吉斯

Injector injector = Guice.createInjector();
YourObject yo = injector.getInstance(YourObject.class);

该注释在javax中提供了一个标准名称,因此从理论上讲,我可以将Guice换成其他名称。