在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
,而不是覆盖的 defaultCheckoutFacade
这是在其他一些 xml 配置文件中定义的。
那么有没有办法在运行时知道某个 Spring bean 定义正在使用哪个实现类?我的意思是,无需调试代码。
最佳答案
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
编入每个 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 控制台。但这完全是另一篇文章了!
资源:
- Beanshell User Manual
- Beanshell Commands Documentation (内置函数,如
print()
)
关于sap-commerce-cloud - 我如何在运行时知道为我的 Spring bean 设置了哪些实现类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090514/