先说结论:
1、XML配置和注解生成默认BeanName的机制是不同的
2、XML配置默认BeanName = 全类名 + # + 数字,如 com.anyway.p2024.service.impl.BigHouseServiceImpl#0
3、注解默认BeanName = 短类名首字母变成小写,如 bigHouseServiceImpl
**注意:如果短类名前2个字母都是大写,则保持短类名不变,比如 ALibaba**
## 示例
com.anyway.p2024.service.BigHouseService
```java
public interface BigHouseService {
}
```
com.anyway.p2024.service.impl.BigHouseServiceImpl
```java
@Service
public class BigHouseServiceImpl implements BigHouseService {
}
```
com.anyway.p2024.service.impl.BigHouseServiceImpl2
```java
@Service
public class BigHouseServiceImpl2 implements BigHouseService {
}
```
com.anyway.p2024.domain.ALibaba
```java
@Component
public class ALibaba {
}
```
applicationContext.xml
```xml
```
Demo04.java
```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 会输出什么?