繁体   English   中英

将状态传递给CDI容器管理的bean

[英]Passing state to CDI-container-managed beans

我在这个项目中使用Spring,但是Guice也遇到了同样的问题。

基本上,我具有需要无状态助手和状态数据才能运行的功能。

public class AwesomeDoer {
    @Inject
    private Helper helper; //stateless
    ...
    public void doAwesome(int state) {
        helper.help(state)
    }

}

直到doAwesome有5个参数并被调用1000次,这看起来还是不错的,但是每次3个参数都是相同的值,而第四个参数可能只改变了几次。 将适当的参数更改为字段是显而易见的解决方案。 但是,这需要您牺牲此类的CDI管理,否则必须在Spring完成其工作后必须具有一个初始化器或设置器来填充状态。

我通常通过创建一个由Spring管理的工厂来解决这个问题,即

public class AwesomeFactory {
    @Inject
    private Helper helper;

    public AwesomeDoer getAwesomeDoer(int state) {
        return new AwesomeDoer(helper, state);
    }
}

但是再次,这意味着我的AwesomeDoer不再由Spring管理,并且它要求我编写另一层非业务逻辑。 也很容易想象这种方法会导致创建AwesomeFactoryFactory等,这总是使我在内部有些丧命。

那么,有人能做到这一点吗?

您可以使用Spring的@Configurable标记bean,并使用new AwesomeDoer并在构造函数中传递参数来创建它。 @Configurable使您可以按需创建Bean,Spring将管理该Bean来触发@Autowired之类的注入。

更多信息: 使用new关键字创建一个bean,并由Spring管理 ,检查底部的部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM