聊聊spring繼承的問題
spring繼承的問題
為什麼輸出是0呢?
因為是子類繼承父類,實例對象調用的主要是左邊的父類屬性和方法,所以輸出結果是以左邊對象為主
spring註入有繼承關系的類
通過配置文件
<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容器自動裝配有依賴關系的Bean protected BaseRepository baseRepository;--------//這裡是子類繼承依賴關系 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>
測試代碼和結果
測試代碼:
@Test public void test() { ApplicationContext actx=new ClassPathXmlApplicationContext("Bean-genericity-di.xml"); UserService userService=(UserService) actx.getBean("userService"); userService.add(); }
測試結果:
add…………..
com.jeremy.spring.genericityDI.UserRepository@16546ef
從結果看,雖然子類沒有建立依賴關系,但userRepository實例還是被實例化瞭,就證明瞭父類的依賴關系,子類是可以繼承的
其實這裡也可以說明,就算父類不是被IOC容器管理,但是建立關系時添加瞭@Autowired註解,父類的關系會被繼承下來
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 詳解spring如何使用註解開發
- Spring五大類註解讀取存儲Bean對象的方法
- Spring超詳細講解註解開發
- Spring詳解使用註解開發流程
- 解決spring懶加載以及@PostConstruct結合的坑