java - 如何获取 Autowiring 的bean的范围

标签 java spring spring-boot

我有 2 个 bean 一个 bean 是 Singleton 另一个是原型(prototype)

 @Scope(value="singleton")
 @Component
 public class A{

 @Autowired
 B b;
 }

另一个 bean ,
 @Scope(value="prototype")
 @Component
 public class B{
 }

通过代码我可以分别得到 A 和 B 的 bean 范围,
 bean.getClass().getAnnotations(Scope.class)

如何获取已在 A 中 Autowiring 的 Bean B 的范围。由于 A 是单例,当我尝试在 A 中获取 B bean 的范围时,它是否也应该是单例..

不知道如何通过代码得到它......

最佳答案

您可以将 BeanFactory 用于 BeanDefintion,它包含范围

 @Autowired
 ConfigurableWebApplicationContext applicationContext;
 ...

 applicationContext.getBeanFactory().getBeanDefinition("beanName").getScope()

(getBeanFactory() 在 ConfigurableWebApplicationContext 中定义,这是一个由除 StubWebApplicationContext 之外的每个具体 ApplicationContext 实现的接口(interface))

关于java - 如何获取 Autowiring 的bean的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51408157/

相关文章:

java - 还有比HashMap更简单的方法吗?

java - 表达式的类型必须是数组类型,但它解析为 SoapObject

java - 如何检查方法的通用返回类型是否与通过参数传递的类匹配?

java - Spring RestTemplate 将大文件转发到另一个服务

Java 8 上的 Spring Boot 应用程序的 Gradle 包装器失败,Gradle 3 : can't find cacerts

java - 如何在 onNext 调用中从上下文/范围中获取变量? (java/grpc)

java - Spring @Component HttpGet 执行

java - 当自定义 Servlet Filter 中抛出错误时, doFilter 方法会被多次调用

java - Spring boot HandlerInterceptor负载均衡

java - 如何在Spring-Boot中创建DefaultMessageListenerContainer?