上一篇介紹了一些理解和概念,本篇結合代碼談談,本篇適合小白代碼在 github 倉庫java
[toc]git
先來個 Demo 感覺一下,代碼是基於 Maven 構建的,若是不熟悉 maven 能夠查看公衆號 JavaPub 目錄學習。
在 Idea 新建 Maven 項目,目錄結構如圖github
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>javapub.rodert</groupId> <artifactId>firstSpringProject</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.2.7.RELEASE</version> </dependency> </dependencies> </project>
src
目錄下建立一個名爲 javapub.rodert
的包,而後在該包中建立一個名爲 PersonDao
的接口,並在接口中添加一個 add()
方法package javapub.rodert; /** * @author wangshiyu rodert * @date 2020/7/2 20:13 * @description */ public interface PersonDao { public void add(); }
在 javapub.rodert
包下建立 PersonDao
的實現類 PersonDaoImpl
spring
package javapub.rodert; /** * @author wangshiyu rodert * @date 2020/7/2 20:14 * @description */ public class PersonDaoImpl implements PersonDao { public void add() { System.out.println("執行成功!!!"); } }
Spring 配置文件是整合 Spring 的核心apache
<?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 id="personDao" class="javapub.rodert.PersonDaoImpl"/> </beans>
新建測試類微信
package javapub.rodert; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author wangshiyu rodert * @date 2020/7/2 20:15 * @description */ public class PersonDaoTest { @Test public void test1(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml"); PersonDao personDao = (PersonDao) applicationContext.getBean("personDao"); personDao.add(); } }
返回結果:app
執行成功!!!
使用 JUnit 測試運行測試方法,運行成功。在程序執行時,對象的建立並非經過 new
一個類完成的,而是經過 Spring 容器管理實現的。這就是 Spring IoC
(控制反轉) 容器思想的工做機制。框架
依賴注入(Dependency Injection,DI)和控制反轉含義相同,它們是從兩個角度描述的同一個概念。maven
當某個 Java 實例須要另外一個 Java 實例時,傳統的方法是由調用者建立被調用者的實例(例如,使用 new
關鍵字得到被調用者實例),而使用 Spring 框架後,被調用者的實例再也不由調用者建立,而是由 Spring 容器建立,這稱爲控制反轉。學習
指 IoC 容器使用 setter 方法注入被依賴的實例。經過調用無參構造器或無參 static 工廠方法實例化 bean 後,調用該 bean 的 setter 方法,便可實現基於 setter 的 DI。
指 IoC 容器使用構造方法注入被依賴的實例。基於構造器的 DI 經過調用帶參數的構造方法實現,每一個參數表明一個依賴。
@Autowired
聲明:參考來源互聯網,有任何爭議能夠留言。站在前人的肩上,咱們才能看的更遠。本教程純手打,致力於最實用教程,但願多多轉發支持,對我真的很重要。
歡迎來我公衆號,但願能夠結識你,更多原創PDF,微信搜索:JavaPub,回覆:【666】,也能夠催更。有任何問題均可以來談談 !
下篇SSM整合