我需要确保使用会话范围定义给定的bean。
我知道我可以使用ctx.isSingleton()
或ctx.isPrototype()
ctx
是我的(Web)ApplicationContext,但是没有isSession()
。
如果您想知道为什么我需要这样的话,请查看this question。
相关:Can I programmatically determine if a spring bean is not singleton?
答案 0 :(得分:1)
我会尝试:
AbstractApplicationContext abstractContext = (AbstractApplicationContext) context;
BeanFactory = beanFactory = abstractContext.getBeanFactory();
BeanDefinition beanDefinition = ((DefaultListableBeanFactory)beanFactory).
getBeanDefinition("beanName");
boolean isSessionScope = "session".equals(beanDefinition.getScope());
我不是100%确定beanDefinition.getScope()是否返回“session”或“session_scope”或类似内容,但我认为找到正确的字符串应该没问题。
获取DefaultListableBeanFactory
的另一种方法是通过注入或实现BeanFactoryAware
接口来获取它。
如果您的应用程序上下文属于GenericApplicationContext
类型,那么您可以直接使用方法GenericApplicationContext.getBeanDefinition(String name)
。