Spring默认BeanName
先说结论:
1、XML配置和注解生成默认BeanName的机制是不同的
2、XML配置默认BeanName = 全类名 + # + 数字,如 com.anyway.p2024.service.impl.BigHouseServiceImpl#0
3、注解默认BeanName = 短类名首字母变成小写,如 bigHouseServiceImpl
注意:如果短类名前2个字母都是大写,则保持短类名不变,比如 ALibaba
示例
com.anyway.p2024.service.BigHouseService
public interface BigHouseService { }
com.anyway.p2024.service.impl.BigHouseServiceImpl
@Service public class BigHouseServiceImpl implements BigHouseService { }
com.anyway.p2024.service.impl.BigHouseServiceImpl2
@Service public class BigHouseServiceImpl2 implements BigHouseService { }
com.anyway.p2024.domain.ALibaba
@Component public class ALibaba { }
applicationContext.xml
<context:annotation-config /> <context:component-scan base-package="com.anyway" /> <bean class="com.anyway.p2024.service.impl.BigHouseServiceImpl" /> <bean class="com.anyway.p2024.domain.ALibaba" /> <bean class="com.anyway.p2024.domain.ALibaba" />
Demo04.java
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); System.out.println(JSON.toJSON(BeanFactoryUtils.beanNamesForTypeIncludingAncestors(ac, BigHouseService.class))); System.out.println(JSON.toJSON(BeanFactoryUtils.beanNamesForTypeIncludingAncestors(ac, ALibaba.class)));
输出如下:
["bigHouseServiceImpl","bigHouseServiceImpl2","com.anyway.p2024.service.impl.BigHouseServiceImpl#0"] ["ALibaba","com.anyway.p2024.domain.ALibaba#0","com.anyway.p2024.domain.ALibaba#1"]
思考题:
如果将 com.anyway.p2024.domain.ALibaba 复制到 com.anyway.p2024.service.ALibaba ,执行 Demo04.java 会输出什么?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律