在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定义?无需调试代码,我的意思是。
答案 0 :(得分:6)
检查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控制台。但那是另外一篇文章!
<强>资源:强>
print()
)