和爱豆聊天的小程序:Spring的 Javaconfig和原型豆

关于和爱豆聊天的小程序的问题,在protobean中经常遇到, 我已经将我的代码从 Spring 的 XML 配置移动到 Java 配置。我有一切工作,但我有一个关于我如何实现原型 bean 的问题-主要是,虽然我正在做的工作,这是最好的方法吗?不知何故,它只是感觉关闭!

我已经将我的代码从 Spring 的 XML 配置移动到 Java 配置。我有一切工作,但我有一个关于我如何实现原型 bean 的问题-主要是,虽然我正在做的工作,这是最好的方法吗?不知何故,它只是感觉关闭!

我这样写 bean 类:

@Component
@Scope("prototype")
public class ProtoBean {
    ...
}

然后使用 bean-这是我不确定的部分,虽然它确实有效:

@Component
public class BeanUser implements ApplicationContextAware {
    ApplicationContext context;
    @Override
    public void setApplicationContext(ApplicationContext context)throws BeansException
    {
        this.context = context;
    }
    public void getProtoBean() {
         ProtoBean protoBean = context.getBean(ProtoBean.class);
    }
}

这让我得到一个原型 bean,在单元测试中我只是嘲笑上下文,用 mock 调用 setApplicationContext,并让 mock 的 getBean 调用返回一个 mock ProtoBean。所以一切都很好。

我通过使用工厂在 XML 中做到了这一点,但这似乎并不能很好地工作,所以这就是我结束的地方。但是有没有办法在没有上下文的情况下做到这一点?或者只是一个更好的方

谢谢

1

我不认为是 Spring XML vs Java-base 配置的问题,而是匹配的依赖范围之一。由于 Spring 只能在创建时对单例作用域的 bean 进行依赖注入,因此您必须按需查找原型作用域的 bean。当然,当前的 bean-lookup 方法有效,但在 ApplicationContext 上创建了一个依赖项。我可以建议一些其他的可能性,但问题的根源应该是真正参与生产 Protooffs

您可以使 BeanUser 本身具有原型范围,这将允许您作为成员连接 ProtoBean。当然,权衡是您现在在 BeanUser 的客户端上遇到相同的问题,但有时这不是问题。

另一个路径可能是使用类似单例作用域的 ProtoBeanFactory 来提供 ProtoBean 实例,并在 ProtoBeanFactory 中隐藏依赖项查找。

最后,你可以使用一个作用域 bean 来有效地隐藏工厂。它使用 AOP 来做到这一点,并不总是清楚别人你有什么样的巫术。使用 XML,你会在 bean 声明中使用<aop:scoped-proxy/>。对于注释,你会使用:

@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(423)
生蚝capo:统一生成管网格(unity mesh)
上一篇
Python实现pdf转word:将Word文档转换为PDF-Python
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(6条)