<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • Java開發學習(二)----IOC、DI入門案例

    一、IOC入門案例

    1.1 思路分析

    (1)Spring是使用容器來管理bean對象的,那么管什么?

    • 主要管理項目中所使用到的類對象,比如(Service和Dao)

    (2)如何將被管理的對象告知IOC容器?

    • 使用配置文件

    (3)被管理的對象交給IOC容器,要想從容器中獲取對象,就先得思考如何獲取到IOC容器?

    • Spring框架提供相應的接口

    (4)IOC容器得到后,如何從容器中獲取bean?

    • 調用Spring框架提供對應接口中的方法

    (5)使用Spring導入哪些坐標?

    • 用別人的東西,就需要在pom.xml添加對應的依賴

    1.2 代碼實現

    需求分析:將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.從容器中獲取對象進行方法調用

    步驟1:創建Maven項目

    步驟2:添加Spring的依賴jar包

    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>

    步驟3:添加案例中需要的類

    創建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();
        }
    }

    步驟4:添加spring配置文件

    這個功能是商業版才有的功能,了解一下即可

    resources下添加spring配置文件applicationContext.xml,并完成bean的配置

    步驟5:在配置文件中完成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屬性在同一個上下文中(配置文件)不能重復

    步驟6:獲取IOC容器

    使用Spring提供的接口完成IOC容器的創建,創建App類,編寫main方法

    public class App {
        public static void main(String[] args) {
            //獲取IOC容器
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 
        }
    }

    步驟7:從容器中獲取對象進行方法調用

    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();
        }
    }

    步驟8:運行程序

    測試結果為:

    Spring的IOC入門案例已經完成,但是在BookServiceImpl的類中依然存在BookDaoImpl對象的new操作,它們之間的耦合度還是比較高,這塊該如何解決,就需要用到下面的DI:依賴注入

    二、DI入門案例

    2.1 思路分析

    (1)要想實現依賴注入,必須要基于IOC管理Bean

    • DI的入門案例要依賴于前面IOC的入門案例

    (2)Service中使用new形式創建的Dao對象是否保留?

    • 需要刪除掉,最終要使用IOC容器中的bean對象

    (3)Service中需要的Dao對象如何進入到Service中?

    • 在Service中提供方法,讓Spring的IOC容器可以通過該方法傳入bean對象

    (4)Service與Dao間的關系如何描述?

    • 使用配置文件

    2.2 代碼實現

    需求:基于IOC入門案例,在BookServiceImpl類中刪除new對象的方式,使用Spring的DI完成Dao層的注入

    1.刪除業務層中使用new的方式創建的dao對象

    2.在業務層提供BookDao的setter方法

    3.在配置文件中添加依賴注入的配置

    4.運行程序調用方法

    步驟1: 去除代碼中的new

    在BookServiceImpl類中,刪除業務層中使用new的方式創建的dao對象

    public class BookServiceImpl implements BookService {
        //刪除業務層中使用new的方式創建的dao對象
        private BookDao bookDao;
    ?
        public void save() {
            System.out.println("book service save ...");
            bookDao.save();
        }
    }

    步驟2:為屬性提供setter方法

    在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;
        }
    }
    ?

    步驟3:修改配置完成注入

    在配置文件中添加依賴注入的配置

    <?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進行注入

    • 綜上所述,對應關系如下:

    步驟4:運行程序

    運行,測試結果為:

     

    posted @ 2022-05-30 22:23  |舊市拾荒|  閱讀(242)  評論(1編輯  收藏  舉報
    国产美女a做受大片观看