环境是 springboot 2.3.3 ,JDK 11 。
@Slf4j
@Service
public class TestServiceImpl extends ... implements ... {
...
}
通过 ApplicationContext (或者 hutool 的 SpringUtil 之类的工具类)获取 bean
@Autowired
private ApplicationContext ctx;
Object bean = ctx.getBean("testServiceImpl");
出现异常
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'testServiceImpl' available
按照我的理解,@Service
中我没有指定 beanName ,默认的就应该是 testServiceImpl
吧?并且以前就是这么使用的,没有遇到过问题。
然后尝试通过 Class 获取
// [com.xxx.xxx.service.impl.TestServiceImpl]
String[] arr = ctx.getBeanNamesForType(TestServiceImpl.class);
// {com.xxx.xxx.service.impl.TestServiceImpl = com.xxx.xxx.service.impl.TestServiceImpl@5a48da4f}
Map<String, TestServiceImpl> beansOfType = ctx.getBeansOfType(TestServiceImpl.class);
从日志输出结果来看,beanName 是类的全限定名,随后尝试用 getBean(类的全限定名)
可以获取到 service 。
就算我在 @Service
注解中指定 beanName ,@Service("testServiceImpl")
,上面两个的输出也还是类的全限定名。
请问这是什么问题?我的目标是希望能够用 getBean("testServiceImpl")
来获取,testServiceImpl
实际上是一个传进方法的变量。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.