4

在 hybris 中,是否有一种简单的方法可以知道某个 Spring bean 正在使用哪个实现类?

我的意思是,我可以通过执行以下操作来覆盖 Bean:

<alias name="myCheckoutFacade" alias="checkoutFacade"/>
<bean id="myCheckoutFacade" class="com.pedra.facades.checkout.impl.MyCheckoutFacadeImpl" scope="tenant" parent="defaultCheckoutFacade">
    <property name="commerceCheckoutService" ref="myCommerceCheckoutService"/>
</bean>

...所以现在当 Spring 需要使用别名创建一个 bean 时,checkoutFacade实现类将与在其他一些 xml 配置文件中定义MyCheckoutFacadeImpl的覆盖相反。defaultCheckoutFacade

那么有没有办法在运行时知道哪个实现类正在用于某个 Spring bean 定义?我的意思是,无需调试代码。

4

1 回答 1

6

Beanshell 或 Groovy :-)

检查 bean 的实现类只是您在运行时使用 Beanshell 或 Groovy 可以做的许多很酷的事情之一。

免责声明:小心在生产机器上运行 Beanshell 或 Groovy 代码!

  • 登录到 HAC 并转到控制台 > Beanshell 或 Groovy

  • 在 Beanshell 或 Groovy 中执行以下代码以获取您的实现类:

    de.hybris.platform.core.Registry.getApplicationContext().getBean("checkoutFacade");

两个控制台都将在结果选项卡中显示最后一个表达式的结果。

Hybris 5.x的 Groovy 控制台中,简单地执行以下命令:

checkoutFacade

如您所见,每个 bean 都自动def-ed 到每个 Groovy 脚本中。

至于 Beanshell,您可以bean在 Beanshell 中创建一个函数:

import de.hybris.platform.core.Registry;
import de.hybris.platform.commercefacades.order.CheckoutFacade;

Object bean(String beanName) 
{
    return Registry.getApplicationContext().getBean(beanName);
}

CheckoutFacade checkoutFacade = (CheckoutFacade) bean("checkoutFacade");
print(checkoutFacade);

我最终使用 Beanshell 如此之多,以至于我创建了自己的包装应用程序,它允许我在 Eclipse 中开发 Beanshell,并将 Eclipse 用作 Beanshell 控制台。但这完全是另一篇文章!

资源:

于 2014-01-14T16:59:20.147 回答