具体描述 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 的配置问题。