關(guān)于spring中不同包中類名相同報錯問題的總結(jié)
spring中不同包中類名相同報錯問題
問題
首先采用注解方式在cn.zy.spring.anno包中創(chuàng)建UserDao類
Demo:
@Repository("userDao")
public class UserDao {
? ? public void add(){
? ? ? ? System.out.println("dao...");
? ? }
}接著在cn.zy.spring.jdbcTemplate包中創(chuàng)建UserDao類,并增加findObjeect測試方法。
Demo:
@Component("userDao")
public class UserDao {
? ? public void find(){
? ? ? ? System.out.println("cn.zy.spring.jdbcTemplate的userDao");
? ? }
}創(chuàng)建junit測試類:
Demo:
public class TestIOC {
? ? @Test
? ? public void testUser(){
? ? ? ? ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
? ? ? ? UserDao userDao = (UserDao) application.getBean("userDao");
? ? ? ? userDao.find();
? ? }運行結(jié)果報錯:
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]
分析原因
由于采用注解開發(fā),雖然兩個類在不同的包中,但是id卻相同,這就會導致創(chuàng)建了兩個相同的類,而spring是無法識別的。
解決辦法
將其中一個UserDao類的注解的name屬性改為其它值,只要不出現(xiàn)兩個相同的name值就可以。
心得
我猜想在spring的beanFactory并沒有對創(chuàng)建的對象進行按包分類,配置文件中配置的class屬性只是為反射提供創(chuàng)建對象的路徑而已。
beanFactory就像是一個對象池子,非常雜亂,在你加載spring的配置文件時,所有的對象及依賴關(guān)系都會被創(chuàng)建然后放在這個大池子中,使用的時候從里面取就可以了。
這點spring做的并不人性化,需要改進啊!
不同jar包類名相同怎么辦呀?
如果你在同一個項目中使用了不同的 jar 包,其中有兩個類名相同,那么這時候就需要用到類的全名(包括包名)。
例如,如果在你的項目中有兩個包,一個是 com.example.package1,另一個是 com.example.package2,且兩個包中都有一個類名為 MyClass,
那么你可以使用如下方式來區(qū)分這兩個類:
com.example.package1.MyClass com.example.package2.MyClass
也就是使用類的全名來區(qū)分它們。
如果你想在代碼中使用這兩個類,你可以這樣寫:
import com.example.package1.M
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot中application配置文件的生效順序及應用范圍
Spring?Boot的一個重要特性就是它的自動配置,這一特性在很大程度上依賴于名稱為application的配置文件,本文將詳細介紹在Spring?Boot中,這些配置文件的加載順序以及每份文件的應用范圍,需要的朋友可以參考下2024-03-03
SpringBoot集成Mybatis-plus并實現(xiàn)自動生成相關(guān)文件的示例代碼
Mybatis-Plus是一個優(yōu)秀的Mybatis增強工具,目前更新到3.1.1,本文通過示例代碼給大家介紹SpringBoot集成Mybatis-plus并實現(xiàn)自動生成相關(guān)文件的問題,感興趣的朋友跟隨小編一起看看吧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

