非常感谢有人帮助我理解此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关键字的实现方式...还是我可以解决?
答案 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换成其他名称。