Dependency injection Java EE 6:@Inject和Instance<;T>;

Dependency injection Java EE 6:@Inject和Instance<;T>;,dependency-injection,ejb,javabeans,java-ee-6,cdi,Dependency Injection,Ejb,Javabeans,Java Ee 6,Cdi,我对java ee 6中的@Inject注释有一个问题: 以下两者之间的区别是什么: @Inject private TestBean test; @Inject private Instance<TestBean> test2; 有关实例的一些信息: 可能是在get()调用对象之前,它不会创建对象?我只是想知道哪一个更适合jvm内存。我认为direct@Inject将直接创建对象的实例,即使应用程序没有使用它 谢谢大家! 第二个是所谓的延迟注入或初始化。在大多数情况下调用get

我对java ee 6中的
@Inject
注释有一个问题:

以下两者之间的区别是什么:

@Inject
private TestBean test;

@Inject
private Instance<TestBean> test2;
有关实例的一些信息:

可能是在get()调用对象之前,它不会创建对象?我只是想知道哪一个更适合jvm内存。我认为direct
@Inject
将直接创建对象的实例,即使应用程序没有使用它


谢谢大家!

第二个是所谓的延迟注入或初始化。在大多数情况下调用get()之前,容器将为TestBean定位、初始化和注入适当的对象

至于“哪一个更好”,你应该遵循优化的规则。在出现问题之前不要进行优化,并使用探查器

换言之,使用第一种方法,除非你能确切地证明第二种方法为你节省了大量的内存和cpu


如果这能回答你的问题,请告诉我

例如,有关用例的更多信息可以在文档中找到:

在某些情况下,注入不是获取上下文引用的最方便的方式。例如,在以下情况下可能不使用:

  • bean类型或限定符在运行时动态变化
  • 可能没有满足类型和限定符的bean
  • 我们希望迭代特定类型的所有bean
这很酷,所以你可以这样做

@Inject @MyQualifier Instance<MyType> allMycandidates;
@Inject@MyQualifier实例allMycandidates;

因此,您可以从所有my候选对象中获取迭代器,并对所有限定对象进行迭代。

我的回答是否足够,或者我是否可能误解了您的问题?如果你偶然发现它有用,不要忘记投票支持它和/或将其标记为已接受。谢谢Thx的回复,事实上我想在Vaadin框架(基于GWT)中使用它,我想知道将所有UI组件作为Inject是否会破坏性能,例如:@Inject LoginScreen login screen实际上,在应用程序的开始,他将在jvm上加载所有注入,如果用户不使用这些注入,可能会导致性能降低……老实说,我怀疑您是否会看到直接注入对性能的影响。我肯定会走这条路,而不是冒技术债务的风险!我在春季用50多个bean编写了大量注入DI的应用程序,并没有看到DI的影响。所以你的意思是在jee 6中进行大量注入注释不会降低客户端的性能?是的。大量注射不太可能影响用户体验。自己试试看;在不太可能因为某种原因影响用户体验的情况下,回到堆栈溢出,我们可以帮助您使用visualvm分析代码。是否可以将有状态实例注入无状态bean中的方法?我只想将实例绑定到方法上下文。
@Inject @MyQualifier Instance<MyType> allMycandidates;