转向bean存档隔离的缺点?

时间:2018-01-16 14:45:16

标签: java-ee cdi

假设一个组件(即jar文件) FeedbackAPI 带有接口

public interface Feedback {
    String giveFeedback();
}

和使用该界面的另一个组件(即jar文件) FeedbackUser

public class FeedbackCollector {
    @Inject Feedback feedback;
    ...
}

有两个实现

@Alternative
public class GoodFeedback implements {
    String giveFeedback() { return "good"; } 
}

@Alternative
public class BadFeedback implements {
    String giveFeedback() { return "bad"; } 
}

要选择要使用的实现,我想在我的webapp的beans.xml中选择替代方案,而不要触及FeedbackUser的beans.xml。但这只有在我转向bean存档隔离时才有可能。

转换bean归档隔离是否有任何缺点?

1 个答案:

答案 0 :(得分:0)

正如我们在评论中所讨论的那样,实际(并且从CDI角度来看)正确的解决方案是将beans.xml添加到您的FeedbackUser组件中并在那里启用替代方案。

回到关于平面部署的原始问题......

缺点是你不能通过以每个归档的方式限制bean来细化你的部署(例如,你不能在一个归档中启用拦截器/装饰器/备选,而在另一个归档中禁用它们)。您可能还会注意到,您的扩展程序的行为会有所不同,因为观察者可能会收到有关其他事件的通知(否则这些事件将保持不变"对于他们而言)。并且可能存在其他差异,您的里程可能会因您的设置而异。

以这种方式思考 - 就好像你采用了所有架构,工具库,WAR部署,后端处理库,并将其压缩回一个(bean)存档。如果您使用平面部署,那就是CDI如何看待它。

为什么要介绍?对于某些情况,测试是一个,这可能很方便。其他用例类似于您所拥有的但没有能力修改beans.xml - 在这种情况下您无法启用它。您可以使用平面部署来处理启用(以及其他事项)。它不是一个常见的用例,如果可以的话,您应该仍然坚持原始的结构化部署。