我试图通过名称找出 bean 的范围。
目前我发现的是:
BeanFactory#isPrototype(String name)
#isSingleton(String name)
在我的例子中,我想知道这个 bean 是否在请求范围内。我可以使用 Spring 框架中的一些内部方法,但我想知道是否有一种“正确”的方法来实现它。
最佳答案
好问题。
BeanFactory
中没有方法 isRequst()
,因为请求范围仅与 Web 相关。
我刚刚尝试找到执行此操作的方法但失败了。因此,如果您使用注释,我可以建议您使用一种解决方法。当你得到 bean 实例时说 bean.getClass().getAnnotation(Scope.class)
。如果这返回 Scope
调用 value()
。
这不是“科学”方法,但希望对您来说足够好。
编辑
其他方法如下。请求范围 bean 存储在请求属性中。我现在不记得它的名字了,但你可以自己轻松找到它,只需在调试器中检查你的请求即可。然后检查是否存在对您的 bean 的引用。这种方法可能更好,但需要一些努力来调查请求属性和 Spring 框架使用的数据结构。
关于java - 如何以编程方式确定 bean 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30163491/