(1)Spring是使用容器來管理bean物件的,那麼管什麼?
主要管理專案中所使用到的類物件,比如(Service和Dao)
(2)如何將被管理的物件告知IOC容器?
使用組態檔
(3)被管理的物件交給IOC容器,要想從容器中獲取物件,就先得思考如何獲取到IOC容器?
Spring框架提供相應的介面
(4)IOC容器得到後,如何從容器中獲取bean?
呼叫Spring框架提供對應介面中的方法
(5)使用Spring匯入哪些座標?
用別人的東西,就需要在pom.xml新增對應的依賴
需求分析:將BookServiceImpl和BookDaoImpl交給Spring管理,並從容器中獲取對應的bean物件進行方法呼叫。
1.建立Maven的java專案
2.pom.xml新增Spring的依賴jar包
3.建立BookService,BookServiceImpl,BookDao和BookDaoImpl四個類
4.resources下新增spring組態檔,並完成bean的設定
5.使用Spring提供的介面完成IOC容器的建立
6.從容器中獲取物件進行方法呼叫
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
建立BookService,BookServiceImpl,BookDao和BookDaoImpl四個類
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
public interface BookService {
public void save();
}
public class BookServiceImpl implements BookService {
private BookDao bookDao = new BookDaoImpl();
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
這個功能是商業版才有的功能,瞭解一下即可
resources下新增spring組態檔applicationContext.xml,並完成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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--bean標籤標示設定bean
id屬性標示給bean起名字
class屬性表示給bean定義型別
-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"/>
</beans>
注意事項:bean定義時id屬性在同一個上下文中(組態檔)不能重複
使用Spring提供的介面完成IOC容器的建立,建立App類,編寫main方法
public class App {
public static void main(String[] args) {
//獲取IOC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
public class App {
public static void main(String[] args) {
//獲取IOC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// BookDao bookDao = (BookDao) ctx.getBean("bookDao");
// bookDao.save();
BookService bookService = (BookService) ctx.getBean("bookService");
bookService.save();
}
}
測試結果為:
Spring的IOC入門案例已經完成,但是在BookServiceImpl
的類中依然存在BookDaoImpl
物件的new操作,它們之間的耦合度還是比較高,這塊該如何解決,就需要用到下面的DI:依賴注入
。
(1)要想實現依賴注入,必須要基於IOC管理Bean
DI的入門案例要依賴於前面IOC的入門案例
(2)Service中使用new形式建立的Dao物件是否保留?
需要刪除掉,最終要使用IOC容器中的bean物件
(3)Service中需要的Dao物件如何進入到Service中?
在Service中提供方法,讓Spring的IOC容器可以通過該方法傳入bean物件
(4)Service與Dao間的關係如何描述?
使用組態檔
需求:基於IOC入門案例,在BookServiceImpl類中刪除new物件的方式,使用Spring的DI完成Dao層的注入
1.刪除業務層中使用new的方式建立的dao物件
2.在業務層提供BookDao的setter方法
3.在組態檔中新增依賴注入的設定
4.執行程式呼叫方法
在BookServiceImpl類中,刪除業務層中使用new的方式建立的dao物件
public class BookServiceImpl implements BookService {
//刪除業務層中使用new的方式建立的dao物件
private BookDao bookDao;
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
在BookServiceImpl類中,為BookDao提供setter方法,為容器提供呼叫
public class BookServiceImpl implements BookService {
//刪除業務層中使用new的方式建立的dao物件
private BookDao bookDao;
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
//提供對應的set方法
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
}
在組態檔中新增依賴注入的設定
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--bean標籤標示設定bean
id屬性標示給bean起名字
class屬性表示給bean定義型別
-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<!--設定server與dao的關係-->
<!--property標籤表示設定當前bean的屬性
name屬性表示設定哪一個具體的屬性
ref屬性表示參照哪一個bean
-->
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
注意:設定中的兩個bookDao的含義是不一樣的
name="bookDao"中bookDao
的作用是讓Spring的IOC容器在獲取到名稱後,將首字母大寫,前面加set找對應的setBookDao()
方法進行物件注入
ref="bookDao"中bookDao
的作用是讓Spring能在IOC容器中找到id為bookDao
的Bean物件給bookService
進行注入
綜上所述,對應關係如下:
執行,測試結果為:
本文來自部落格園,作者:|舊市拾荒|,轉載請註明原文連結:https://www.cnblogs.com/xiaoyh/p/16303448.html