gpt4 book ai didi

java - 如何正确使用ExtensionManager和ExtensionHandler实现类

转载 作者:行者123 更新时间:2023-12-01 09:22:02 26 4
gpt4 key购买 nike

  • Broadleaf 使用 ExtensionManager 类实现 InvocableHandler 来扩展功能(通过 ExtensionHandlers)并提供某种钩子(Hook)(例如,首先尝试 ExtensionManager 调用方法,如果未处理,则正常进行)以更改框架类的行为,而无需扩展它们并重写方法。

  • 我的第一个问题是,如果多态性是解决这个问题的整个范式,那么这种方法背后的动机是什么?有什么好处?

  • 其次,如果我要使用它,正确的方法是什么?

  • 例如,我尝试扩展 AbstractInventoryServiceExtensionHandler 并重写方法(因为 Broadleaf 5.0.1 在 InventoryServiceImpl 中存在关于retrieveQuantitiesAvailable 方法中的 CHECK_QUANTITY InventoryType 的错误)

  • 接下来,我扩展了 InventoryServiceExtensionManager 并尝试使用覆盖的方法注册该 ExtensionHandler

  • 在调用有问题的方法时 - 尽管我注册了处理程序,但在 ExtensionManager 上调用的 getProxy() 方法时出现错误,提示来自 Proxy.toString() 的 ClassCastException 和处理程序列表为空?

  • 最后我只是扩展了 InventoryServiceImpl 并纠正了错误,这解决了我的问题,但给我留下了上述问题。

最佳答案

My first question is what is motivation behind this aproach if polymorfism is whole paradigm addressing this problem? What are benefits ?

这允许 Broadleaf 生态系统中的多个“模块”(插件)在运行时(通过注册自身)而不是在编译时修改行为。这是一个较松散的耦合。另外,如果您需要多次修改代码中的同一位置,诸如多态性之类的事情就会崩溃(此时您需要多重继承)

Secondly if I'm going to use it what is correct way to do that?

根据您所说的,您永远不需要扩展扩展管理器,而只需要扩展处理程序。然后处理程序应该向管理器注册自己。这是一个例子:

@Component
public class MyInventoryExtensionHandler extends AbstractInventoryServiceExtensionHandler {

@Resource
protected InventoryServiceExtensionManager extensionManager;

@PostConstruct
public void init() {
extensionManager.registerHandler(this);
}

@Override
public ExtensionResultStatusType retrieveQuantitiesAvailable(Collection<Sku> skus, Map<String, Object> context, ExtensionResultHolder<Map<Sku, Integer>> result) {
...
...
return ExtensionResultStatusType.HANDLED;
}
}

For example I tried to extend AbstractInventoryServiceExtensionHandler and override methods (because broadleaf 5.0.1 has a bug in InventoryServiceImpl regarding CHECK_QUANTITY InventoryType in retrieveQuantitiesAvailable method)

错误是什么?

关于java - 如何正确使用ExtensionManager和ExtensionHandler实现类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40113161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com