溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何理解spring繼承的問題

發(fā)布時間:2021-09-24 09:32:11 來源:億速云 閱讀:147 作者:柒染 欄目:開發(fā)技術(shù)

如何理解spring繼承的問題,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

spring繼承的問題

如何理解spring繼承的問題

如何理解spring繼承的問題

為什么輸出是0呢?

因為是子類繼承父類,實例對象調(diào)用的主要是左邊的父類屬性和方法,所以輸出結(jié)果是以左邊對象為主

spring注入有繼承關(guān)系的類

通過配置文件

<bean id="sysActionService" class="com.service.impy.SysActionServiceImpy" parent="baseService" >    
      <property name="sysActionDao" ref="sysActionDao" />    
  </bean>

通過注解

只需要在子類上加注解,父類上不用加會自動注入

package com.jeremy.spring.genericityDI;
public class BaseRepository{
}

BaseService:

package com.jeremy.spring.genericityDI;
import org.springframework.beans.factory.annotation.Autowired;
public class BaseService<T> {    
    @Autowired------//這里告訴IOC容器自動裝配有依賴關(guān)系的Bean
    protected BaseRepository baseRepository;--------//這里是子類繼承依賴關(guān)系
    public void add(){
        System.out.println("add..............");
        System.out.println(baseRepository);
    }
}

新建一個泛型類

User:

package com.jeremy.spring.genericityDI;
public class User {
}

新建BaseRepository和BaseService的子類

UserRepository:

package com.jeremy.spring.genericityDI;
import org.springframework.stereotype.Component;
@Component
public class UserRepository extends BaseRepository{    
}

UserService:

package com.jeremy.spring.genericityDI;
import org.springframework.stereotype.Service;
@Service
public class UserService extends BaseService{
}

在Spring的配置文件中配置自動裝配帶有注解的Bean  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.jeremy.spring.genericityDI"></context:component-scan>
</beans>

測試代碼和結(jié)果

測試代碼:

@Test
    public void test() {
        ApplicationContext actx=new ClassPathXmlApplicationContext("Bean-genericity-di.xml");
        UserService userService=(UserService) actx.getBean("userService");
        userService.add();
    }

測試結(jié)果:

add..............

com.jeremy.spring.genericityDI.UserRepository@16546ef

從結(jié)果看,雖然子類沒有建立依賴關(guān)系,但userRepository實例還是被實例化了,就證明了父類的依賴關(guān)系,子類是可以繼承的

其實這里也可以說明,就算父類不是被IOC容器管理,但是建立關(guān)系時添加了@Autowired注解,父類的關(guān)系會被繼承下來

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI