使用 intellijIDEA 建立 maven 工程進行 Spring ioc 測試

來源:互聯網
上載者:User

標籤:通過   ESS   設定   配置   運行   spring   value   開啟   類型   

使用 intellijIDEA 建立 maven 工程進行 Spring ioc 測試ioc 概念

控制反轉(Inversion of Control,縮寫為IOC),是物件導向編程中的一種設計原則,可以用來減低電腦代碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱DI)。通過控制反轉,對象在被建立的時候,由一個調控系統內所有對象的外界實體,將其所依賴的對象的引用傳遞給它。也可以說,依賴被注入到對象中。

IOC和DI區別
  • IOC: 控制反轉,把對象建立交給spring進行配置
  • DI: 依賴注入,向類裡面的屬性中設定值
  • 關係:依賴注入不能單獨存在,需要在ioc基礎之上完成操作
建立 spring 執行個體進行 ioc 測試

我們使用 intellijIDEA 來完成這一操作,首先建立 maven 工程(maven提供了 java 中 jar 包的下載管理,方便我們使用下載和匯入 jar 包,推薦使用)。開啟 idea,選擇 Create New Project, 在彈出來的視窗中選擇建立 maven 工程,設定好 JDK 後點擊 next 進行下一步。

設定好 GrouId、ArtifactId、Version 後,按提示一路設定建立好 maven 項目。

我們修改 pom.xml 設定,配置需要添加下載的 jar 包:

 <dependencies>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>4.2.4.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>4.2.4.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-beans</artifactId>            <version>4.2.4.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-expression</artifactId>            <version>4.2.4.RELEASE</version>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>            <scope>test</scope>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>    </dependencies>

當我們修改pom.xml 檔案時,idea 會提示我們匯入,我們點擊 Import Change即可,當然也可以設定Auto-Import自動匯入:

我們在 src/main/java 下建立一個 package:cn.itcast.ioc, 並在 package 下建立 User.java:

package cn.itcast.ioc;public class User {    public void add(){        System.out.println("add......");    }    //public static void main(String[] args) {        //原始做法        //User user = new User();        //user.add();    //}}

在 resources目錄下建立 applicationContext.xml 設定檔:

<?xml version="1.0" encoding="UTF-8"?><!-- scheme約束 --><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">    <!-- ioc 入門 -->    <bean id="user" class="cn.itcast.ioc.User"></bean></beans>

然後在 src/main/java 下建立測試檔案 TestIOC.java ,嘗試能否通過裝載 bean,交由 spring 建立對象,通過設定檔輸出 ioc 執行個體:

package cn.itcast.ioc;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestIOC {    @Test    public void testUser(){        //1.載入 spring 設定檔,根據建立對象        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        //2.得到配置建立的對象        User user = (User) context.getBean("user");        user.add();    }}

運行 TestIOC.java , 若控制台能輸出 add() 方法,便測試成功。

通過設定檔注入屬性

介紹:建立對象時候,向類裡面屬性設定值。

在 spring 中我們一般採用通過set 方法注入。

舉個栗子:

src/main/java/ 下建立 UserService.java:

package cn.itcast.ioc;public class UserService {    //1 定義 user 類型    private User user;    //2 產生set 方法    public void setUser(User user) {        this.user = user;    }    public void add(){        System.out.println("service....");        user.add();    }}

修改 applicationContext.xml 檔案:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:p="http://www.springframework.org/schema/p"       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"><!-- 注入物件類型 -->    <!-- 配置 service 和 user 對象 -->    <bean id="user" class="cn.itcast.ioc.User"></bean>    <bean id="userService" class="cn.itcast.ioc.UserService">        <!-- 注入 user 對象                name 屬性值, service 類裡面的屬性名稱                ref 屬性, 配置bean 標籤中 id 值       -->        <property name="user" ref="user"></property>    </bean></beans>

修改 TestIOC.java:

package cn.itcast.ioc;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestIOC {    @Test    public void testUser(){        //1.載入 spring 設定檔,根據建立對象        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        //2.得到配置建立的對象        UserService userService = (UserService) context.getBean("userService");        userService.add();    }}

成功在控制台輸出 UserService類的 add() 方法和注入的屬性:

通過註解建立 ioc 執行個體

上述執行個體是通過配置 xml 檔案來實現建立對象的功能,spring 也提供了另一種方式來實現上述功能:註解。

註解介紹
  • 代碼裡面特殊標記,使用註解可以完成功能
  • 註解寫法 @註解名稱(屬性名稱=屬性值)
  • 註解使用在類上面,方法上面和屬性上面
建立對象的四個註解
  • @Component
  • @Controller
  • @Service
  • @Repository

主要是通過 Component 衍生出 其他三個在web 層、業務層、持久層註解,主要是為了後續增強。但對我來說這四個註解功能目前來說是一樣的,都是建立對象。

我們重新設定一下 applicationContext.xml 檔案,引入新的約束,開啟註解掃描:

<?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.xsd"> <!-- bean definitions here -->    <!-- 開啟註解掃描        (1) 到包裡面掃描類,方法,屬性上面是否有註解    -->    <context:component-scan base-package="cn.itcast.ioc"></context:component-scan>    <!-- 掃描屬性上面的註解 -->    <!--<context:annotation-config></context:annotation-config>--></beans>

修改 User.java 檔案:

package cn.itcast.ioc;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;@Service(value = "user")  //相當於<bean id="user" class=""/>@Scope(value = "prototype") //多執行個體public class User {    public void add(){        System.out.println("add........");    }}

修改TestIOC.java:

package cn.itcast.ioc;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestIOC {    @Test    public void testUser(){        //1.載入 spring 設定檔,根據建立對象        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        //2.得到配置建立的對象,這裡的getBean()方法中的 user 為User類通過註解的 value 值。        User user = (User) context.getBean("user");        user.add();    }}

控制台成功輸入User 類的 add()方法:

通過註解注入屬性

同樣的,我們可以通過使用註解注入屬性。

這裡有兩種方式,我們可以通過使用 @Autowired(自動注入)或 @Resource(name="value")(name屬性值:註解建立對象 value 值),推薦使用後一種。

註:使用註解不需要 set 方法。

還是舉個栗子:

src/main/java/ 下建立 package 和 UserDao.java 和 UserService.java。

UserDao.java:

package cn.itcast.anno;import org.springframework.stereotype.Service;@Service(value = "userDao")public class UserDao {    public void add(){        System.out.println("dao.........");    }}

UserService.java:

package cn.itcast.anno;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import javax.annotation.Resource;@Service(value = "userService")public class UserService {    //得到dao 對象    //定義 dao 類型    //方法一:在 dao屬性上面使用註解,完成對象注入//    @Autowired//    private UserDao userDao;    //使用註解不需要set 方法        //方法二:    //name屬性值: 註解建立 dao對象 value 值    @Resource(name = "userDao")    private UserDao userDao;    public void add(){        System.out.println("service.......");        userDao.add();    }}

使用上述 applicationContext.xml 中的註解配置,建立 TestAnno.java:

package cn.itcast.anno;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestAnno {    @Test    public void TestService(){        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        UserService userService = (UserService) context.getBean("userService");        userService.add();    }}

運行 TestAnno.java ,控制台輸出如下資訊:

總結:
  • 通過 spring架構的 ioc 容器,我們可以把對象的建立交給 spring 進行,降低代碼的耦合度。
  • 使用 spring 架構 ioc 容器,可以通過配置 xml 檔案和註解兩種方式進行管理。
  • 掌握注入屬性的兩種方式:配置 xml 檔案和註解。
  • 先建立對象,再注入屬性。

使用 intellijIDEA 建立 maven 工程進行 Spring ioc 測試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.