具體描述 Spring:java
核心容器(Core Container) 包括Core、Beans、Context、EL模塊web
數據訪問/集成部分(Data Access/Integration)spring
Webshell
AOP數據庫
Test編程
首先建立一個 Maven 工程(也可使用IDEA裏面的那個 Spring . 這裏初學,就不建議使用那個了。一樣,建議建立 maven 工程,方便 Jar 包的管理);Maven工程你們就能夠本身建立一個空白的 工程就行。數組
建立好咱們的 Maven 工程後,咱們須要配置好咱們的 pom.xml 文件,引入咱們的開發包。緩存
<dependencies> <!-- Spring Core--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring Context--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring Beans--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring Web--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring WebMvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring Aop--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> </dependencies>
咱們的父工程的搭建好了以後,就開始建立咱們的子工程。我這取名: spring-learning-quickstart.子工程是繼承父工程的,這樣咱們就不用再次導入咱們的開發包了。服務器
咱們在 子工程中建立一個 bean , 取名 HelloWorld .mvc
public class HelloWorld { private String name ; public void setName(String name) { this.name = name; } public void sayHello(){ System.out.println("Hello " + name); } public HelloWorld() { System.out.println("Constructor for HelloWorld"); } }
而後,咱們在建立一個主類 Main .
public class Main { public static void main(String[] args) { // 傳統作法( 這不是Spring 的作法) HelloWorld helloWorld = new HelloWorld(); helloWorld.setName("Spring"); helloWorld.sayHello(); } }
一運行,咱們就能夠看到控制檯出現了:
hello Spring
固然,這個不是 Spring 的方式。如今咱們來看看 Spring 中怎麼去作。
Spring 實現
在Spring 中,咱們須要經過配置去實現咱們的這個 HelloWorld 的。首先,咱們在 resource 中新建一個 XML 的文件 。 我這就叫 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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置Bean --> <bean id="helloWorld" class="com.spring.bean.HelloWorld"> <property name="name" value="SunYang's Spring"></property> </bean> </beans>
這裏稍後在解釋。
而後咱們在主類中,這麼來寫。
//1 建立 Spring 的 IOC 容器對象 ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //2 從IOC 容器中獲取 Bean 實例 HelloWorld hello = (HelloWorld)applicationContext.getBean("helloWorld"); //3 調用 sayHello() hello.sayHello();
這樣咱們的控制檯就出現:
hello SunYang's Spring
如今呢,先來看一下,Spring建立了這個容器的過程當中幫咱們作了什麼。咱們在這個容器建立這邊打一個斷點。
而後程序執行到這之後,會自動跳到咱們的 HelloWorld 類裏面,在看這個:
咱們能夠看到,這個時候Spring就已經把 SunYang's Spring 給了 name 了。
所謂控制反轉,實際上是一個由主動轉被動的一個過程。舉個例子:
以前,咱們沒有飲品店的時候,咱們想喝果汁了,就是本身準備水果,而後本身榨果汁。這就是一個主動的創造一杯果汁的過程。可是,如今有飲品店了,咱們想喝果汁了,咱們就不在須要本身去榨一杯果汁,而是叫飲品店去榨一杯果汁,請注意,這裏咱們並無創造一杯果汁,可是依然達到了咱們要喝果汁的目的。這邊是控制反轉的思想。好比說:
我如今要喝 一個 大杯的三分糖的橙子汁。
/** * 咱們要喝的水果汁 * @param water 果汁加的水 * @param fruit 水果類型 * @param sugar 糖 * @return */ public static String juiceMix(String water , String fruit ,String sugar){ String juice = String.format("我要喝 %s 的 , %s 的 %s" , water ,sugar ,fruit ) ; return juice ; }
如今咱們有了要喝的果汁,如今就是須要有人去作,至關於一個店家去作。
public class JuiceProduce { private String water ; private String fruit ; private String sugar ; public void setWater(String water) { this.water = water; System.out.println(this.water); } public void setFruit(String fruit) { this.fruit = fruit; } public void setSugar(String sugar) { this.sugar = sugar; } public JuiceProduce() { System.out.println("Constructor for JuiceProduce"); } public String juiceProduce(){ return Blende.juiceMix(this.water , this.fruit , this.sugar) ; } }
如今咱們須要選擇那家店去喝這個果汁了,就是在 配置文件裏面去配置一下。
<bean id="juiceProduce" class="com.spring.bean.JuiceProduce"> <property name="water" value="大杯" /> <property name="fruit" value="橙汁" /> <property name="sugar" value="三分糖"/> </bean>
咱們選擇這個名叫 juiceProduce 的店家來製造咱們的果汁。最後的結果就是:
我要喝 大杯 的 , 三分糖 的 橙汁
在下一篇中,講一下這個關於 Bean 的配置問題。