gpt4 book ai didi

java - Spring中如何检查request作用域bean的类型?

转载 作者:太空宇宙 更新时间:2023-11-04 09:36:31 26 4
gpt4 key购买 nike

我正在尝试编写一个 Junit 测试,以确保其他测试的配置类设置正确。在此测试期间,我想检查设置的 bean 是真实实现还是虚拟实现。然而,我在尝试验证请求范围 bean 的类型时遇到了问题。

当我像这样设置 bean 时:

@Bean
public MyBeanAI myBeanAI() {
return new MyBeanA();
}

@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public MyBeanBI myBeanBI() {
return new MyBeanB();
}

在测试代码中:

Assert.assertTrue(myBeanAI instanceof MyBeanA);  // Succeeds
Assert.assertTrue(myBeanBI instanceof MyBeanB); // Fails

检查请求作用域 bean 的实现类型的最佳方法是什么?我已经尝试过 .isAssignableFrom() 但它产生了相同的结果。我现在看到的唯一方法是使用 myBeanB.toString() ,如果它没有在我的类中被覆盖,代理将打印出基本类型的名称。 bean.getClass() 但是返回 com.sun.proxy.$Proxy44

SO ( Obtain real Class object for Spring bean ) 上有一个类似的问题,它也想获取有关 Proxy 背后的类的信息,但问题和答案仅涉及用作 bean 定义的返回类型的类对象。就我而言,我不需要有关用于创建 bean 的接口(interface)的信息,而是需要其背后的实际实现。幸运的是,在该问题中指出的同一个 API 提供了另一种适合我的需求的方法。

我自己会添加一个答案。感谢 David Lavender 在评论中指出了另一个问题

最佳答案

正如 David Lavender 在评论中指出的那样,有一个类似的问题涉及在 ( Obtain real Class object for Spring bean ) 处获取代理背后的类。使用 AdvisedTargetSource 接口(interface)的其他方法,也可以获得代理背后的确切实现:

Assert.assertTrue(((Advised) myBeanBI).getTargetSource().getTarget() instanceof MyBeanB);

请注意,另一个问题中使用的方法允许获取代理 bean 背后的接口(interface)。

Assert.assertTrue(((Advised) myBeanBI).getTargetSource().getTargetClass().equals(MyBeanBI.class));

关于java - Spring中如何检查request作用域bean的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56446284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com