如何以编程方式确定bean的范围

San*_*dro 7 java spring scope

我试图通过其名称找出bean的范围.

到目前为止我发现的是:

BeanFactory#isPrototype(String name)
           #isSingleton(String name)
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我想知道bean是否在请求范围内.我可以使用Spring框架中的一些内部方法,但我想知道是否有一种"正确"的方法.

Ale*_*exR 5

好问题。

没有方法isRequst()inBeanFactory因为请求范围仅与 web 相关。

我只是试图找到方法来做到这一点,但失败了。因此,如果您使用注释,我可以向您建议一个可行的解决方法。当你得到 bean 实例时说bean.getClass().getAnnotation(Scope.class)。如果这返回Scopecall value()

这不是“科学”的方法,但希望对你来说足够好。

编辑

其他方法如下。请求范围 bean 存储在请求属性中。我现在不记得它的名字了,但你可以很容易地自己找到它,只需在调试器中检查你的请求。然后检查对您的 bean 的引用是否存在。这种方法可能更好,但需要一些努力来调查 Spring 框架使用的请求属性和数据结构。