关于spring中不同包中类名相同报错问题的总结
spring中不同包中类名相同报错问题
问题
首先采用注解方式在cn.zy.spring.anno包中创建UserDao类
Demo:
@Repository("userDao")
public class UserDao {
public void add(){
System.out.println("dao...");
}
}接着在cn.zy.spring.jdbcTemplate包中创建UserDao类,并增加findObjeect测试方法。
Demo:
@Component("userDao")
public class UserDao {
public void find(){
System.out.println("cn.zy.spring.jdbcTemplate的userDao");
}
}创建junit测试类:
Demo:
public class TestIOC {
@Test
public void testUser(){
ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) application.getBean("userDao");
userDao.find();
}运行结果报错:
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'userDao' for bean class [cn.zy.spring.jdbcTemplate.UserDao] conflicts with existing, non-compatible bean definition of same name and class [cn.zy.spring.anno.UserDao]
分析原因
由于采用注解开发,虽然两个类在不同的包中,但是id却相同,这就会导致创建了两个相同的类,而spring是无法识别的。
解决办法
将其中一个UserDao类的注解的name属性改为其它值,只要不出现两个相同的name值就可以。
心得
我猜想在spring的beanFactory并没有对创建的对象进行按包分类,配置文件中配置的class属性只是为反射提供创建对象的路径而已。
beanFactory就像是一个对象池子,非常杂乱,在你加载spring的配置文件时,所有的对象及依赖关系都会被创建然后放在这个大池子中,使用的时候从里面取就可以了。
这点spring做的并不人性化,需要改进啊!
不同jar包类名相同怎么办呀?
如果你在同一个项目中使用了不同的 jar 包,其中有两个类名相同,那么这时候就需要用到类的全名(包括包名)。
例如,如果在你的项目中有两个包,一个是 com.example.package1,另一个是 com.example.package2,且两个包中都有一个类名为 MyClass,
那么你可以使用如下方式来区分这两个类:
com.example.package1.MyClass com.example.package2.MyClass
也就是使用类的全名来区分它们。
如果你想在代码中使用这两个类,你可以这样写:
import com.example.package1.M
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot中application配置文件的生效顺序及应用范围
Spring Boot的一个重要特性就是它的自动配置,这一特性在很大程度上依赖于名称为application的配置文件,本文将详细介绍在Spring Boot中,这些配置文件的加载顺序以及每份文件的应用范围,需要的朋友可以参考下2024-03-03
SpringBoot集成Mybatis-plus并实现自动生成相关文件的示例代码
Mybatis-Plus是一个优秀的Mybatis增强工具,目前更新到3.1.1,本文通过示例代码给大家介绍SpringBoot集成Mybatis-plus并实现自动生成相关文件的问题,感兴趣的朋友跟随小编一起看看吧2021-12-12
Windows中在IDEA上安装和使用JetBrains Mono字体的教程
这篇文章主要介绍了Windows IDEA上安装和使用JetBrains Mono字体的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-03-03
Spring Boot Shiro auto-configure工作流程详解
这篇文章主要为大家介绍了Spring Boot Shiro auto-configure工作流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-02-02


最新评论