【发布时间】:2019-10-26 12:03:50
【问题描述】:
我目前正在制作一个基于旧系统的系统。旧系统基本上将模块分成单独的类和 bean。然而,对于新系统,许多模块被压缩到一个 bean 中,它会注入如此多的类和其他 bean,这使得它非常慢,因为它需要初始化所有注入的 bean 和类。
有什么方法可以改进吗?有没有类似条件注入的东西,我们只在需要时才调用该类?
目前,我的想法是只在需要时调用类。例如。当用户想要访问用户对象时,只注入用户相关的 bean 和类。不会调用与 Employer 类相关的类和 bean。我不确定这是否可能,如果不可能,是否有办法通过多次注入来提高性能?
【问题讨论】:
-
对于 OpenWebBeans 注入的 bean 在访问时以惰性方式实例化。不确定 Wildfly CDI 实施是否属于这种情况。
-
有效地,一个好的设计已经被一个糟糕的设计所取代,现在你想要一个糟糕的设计的解决方法;-)
-
糟糕的设计意味着将多个类注入到一个 bean 中? @Kukeltje
-
不,做一个“神”类(许多模块(假设一个模块包含多个类)为一个类)。你实际上做了多少次注射?我无法想象你会注意到注射了十几个甚至几十个豆子。除非您在创建 bean 时做很多工作,例如
@Postconstruct带注释的方法。那么你也许应该在那里实现一些惰性的东西 -
我要说的是,两个 CDI impls 都在使用惰性方法来解析普通范围的 bean。而且您已经使用 Weld,因为这是 WildFly(以及几乎所有其他 EE 服务器,除了 tomee)使用的 CDI 实现。您需要向我们提供更多关于您实际运行的详细信息以查看问题所在。我想知道您有多少 bean 可以看到仅注入的任何实际性能问题......