我怎么知道在运行时为我的Spring bean设置了哪些实现类?

时间:2014-01-13 11:47:10

标签: hybris spring-bean

在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需要使用别名checkoutFacade创建一个bean时,实现类将是MyCheckoutFacadeImpl,而不是在其他xml中定义的被覆盖的defaultCheckoutFacade配置文件。

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

1 个答案:

答案 0 :(得分:6)

Beanshell或Groovy: - )

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

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

  • 登录HAC并转到控制台&gt; Beanshell或Groovy

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

    de.hybris.platform.core.Registry.getApplicationContext()的getBean( “checkoutFacade”);

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

Hybris 5.x 的Groovy控制台中,简单执行以下操作:

checkoutFacade

如您所见,每个bean都会自动def - 编入每个Groovy脚本。

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

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控制台。但那是另外一篇文章!

<强>资源: