sap-commerce-cloud - 我如何在运行时知道为我的 Spring bean 设置了哪些实现类?

标签 sap-commerce-cloud 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,而不是覆盖的 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 控制台。但这完全是另一篇文章了!

资源:

关于sap-commerce-cloud - 我如何在运行时知道为我的 Spring bean 设置了哪些实现类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090514/

相关文章:

Spring boot服务启动错误java.lang.NoSuchFieldError : INSTANCE

java - 将 @Component 注解的类更改为 @Bean 注解的方法

java - Spring 刷新 bean 有间隔

java - 在@Configuration或@Component中定义@Bean

java - Hybris CategoryProductRelation 类型作为 ItemModel?

sap-commerce-cloud - 在集群环境中,如果items.xml发生变化,是否可以在一个节点上更新运行系统并清除其他节点的缓存?

shell - 为什么 Jenkins 无法启动该服务,但我手动启动它却可以正常启动?

tomcat - hybris mac 突然出现hybris启动错误

java - 如何从自定义编辑器 hybris 更新/刷新编辑器区域