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

Hen*_*ine 4 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>
Run Code Online (Sandbox Code Playgroud)

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

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

Aar*_*ush 6

Beanshell或Groovy :-)

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

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

  • 登录HAC并转到Console> Beanshell或Groovy

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

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

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

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

checkoutFacade
Run Code Online (Sandbox Code Playgroud)

如您所见,每个bean都自动def进入每个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);
Run Code Online (Sandbox Code Playgroud)

我最终使用Beanshell,以至于我创建了自己的包装器应用程序,允许我在Eclipse中开发Beanshell,并使用Eclipse作为Beanshell控制台.但这是另一篇文章!

资源: