7.泛型的依賴注入
阿新 • • 發佈:2022-05-06
示例: 1.bean層: 1.1 public class Book {}-------->模擬的兩個實體類中沒有具體屬性 1.2 public class User {} 2.service層 2.1Book的service類: @Service---------------->加入了service標籤 public class BookService extends BaseService<Book>{ } 2.2User的service類: @Service---------------->加入了service標籤 public class UserService extends BaseService<User>{-------------->兩個均沒有自己的獨有方法,因為集成了BaseService類 } 2.3BaseService public class BaseService<T> {---------->注意1:該類沒有註解 注意2:該類有泛型 @Autowired----------------------->自動注入的註解 private BaseDao<T> baseDao; public void service(){ baseDao.save(); } } 3.dao層 3.1抽象出基本的dao層方法 public abstract class BaseDao<T> {--------->注意1:該類沒有註解 注意2:該類有泛型 public abstract void save();----------->定義了抽象方法:供其他類重寫 } 3.2book的dao層方法 @Repository----------------------------->加入標籤,將元件載入到容器中 public class BookDao extends BaseDao<Book>{----------->加入book的泛型 public void save() {------------------------------>重寫父類方法 System.out.println("book的儲存方法!"); } } 3.3user的dao層方法 @Repository----------------------------->加入標籤,將元件載入到容器中 public class UserDao extends BaseDao<User>{----------->加入user的泛型 public void save() {------------------------------>重寫父類方法 System.out.println("使用者的儲存方法!"); } } 3.測試程式碼:使用的是springtest的測試 @ContextConfiguration(locations = "classpath:ioc.xml") @RunWith(SpringJUnit4ClassRunner.class) public class Test { @Autowired BookService bookService; @Autowired UserService userService; @org.junit.Test public void test(){ bookService.service();--->輸出:book的儲存方法! userService.service();--->輸出:使用者的儲存方法! } }
結論:
1.service層的繼承研究 父類service: public class BaseService<T> {----->類上並沒有註解,即這個父類不會被載入到容器中 @Autowired--------------->但是帶有@Autowired標籤,按照之前的結論:當一個類有@Autowired自動注入時,這個類必須是容器中的元件: ----->不然:1.無法從容器中獲取該元件 2.無法自動注入 private BaseDao<T> baseDao; public void service(){ System.out.println("自動注入dao:"+baseDao+" 當前物件:"+this); baseDao.save(); } } 子類service: @Service------------>有標籤,所以子類在容器中,並且繼承BaseService類,繼承父類的所有屬性和方法(雖然父類的屬性是私有屬性,按照常規無法繼承, ------------>實質是可以繼承,只是無法使用) public class BookService extends BaseService<Book>{ } 則真實子類為: @Service public class BookService extends BaseService<Book>{ @Autowired private BaseDao<T> baseDao; public void service(){ System.out.println("自動注入dao:"+baseDao+" 當前物件:"+this); baseDao.save(); } } 這時:@Autowired標籤的類在元件中,可以自動裝配