“local”是指在方法调用期间创建和销毁bean。这与调用构造函数基本相同,优点是能够在该bean的字段中使用@Inject。
为什么我要这样做
我正在重构使用CDI的遗留代码。我想extract very long methods into classes。该方法中的局部变量将被该类中的字段替换,因此该bean将具有仅属于该短期范围的状态(方法调用的持续时间)。 bean还将依赖于服务和其他更广泛的bean,而不是将长参数列表传递给构造函数。
答案 0 :(得分:0)
CDI不支持方法注入(除了setter和构造函数)。所以这不可能,因为@Dependent范围依赖于包含bean而不是调用方法。
同样在你的情况下,即使这样做也会产生无限循环,因为你需要将容器传递给子,然后将子传递给容器等等。
解决方案是注入工厂。
答案 1 :(得分:0)
考虑到标准CDI范围,@RequestScoped
可能最适合您的短期bean,即使它们的生命周期长于单个方法调用。
无状态@ApplicationScoped
bean(例如服务)可以并行使用任意数量的@RequestScoped
bean(例如命令)。
如果这不适合您,您始终可以使用CDI扩展名定义自定义范围。