jih*_*ter 14 dependency-injection ejb javabeans cdi java-ee-6
我对@Inject
java ee 6中的注释有疑问:
有什么区别:
@Inject
private TestBean test;
@Inject
private Instance<TestBean> test2;
Run Code Online (Sandbox Code Playgroud)
要参考:
test2.get();
Run Code Online (Sandbox Code Playgroud)
关于Instance的一些信息:http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/Instance.html
也许在get()调用之前它不会创建对象?我只是想知道哪一个更适合jvm内存.我认为direct @Inject
会直接创建一个对象的实例,即使它没有被appplication使用...
谢谢 !
Raf*_*ael 10
有关Instance用例的更多信息,请参阅文档:
在某些情况下,注入不是获取上下文引用的最方便的方法.例如,在以下情况下可能不会使用它:
这很酷,所以你可以做类似的事情
@Inject @MyQualifier Instance<MyType> allMycandidates;
Run Code Online (Sandbox Code Playgroud)
因此,您可以从allMyCandidates获取迭代器并迭代所有限定对象.
第二种是所谓的延迟注入或初始化.您的容器将选择执行定位,初始化和注入TestBean的正确对象的工作,直到您在大多数情况下调用get().
至于"哪一个更好",你应该遵循优化规则.在遇到问题之前不要进行优化,并使用分析器.
换句话说,使用第一个,除非你可以明确地证明第二个节省了大量的内存和CPU.
如果能回答你的问题,请告诉我!
归档时间: |
|
查看次数: |
7613 次 |
最近记录: |