原创文章,转载请注明出处。
Spring 是一个开源的轻量级的 Java 框架,该框架的核心功能有 2 个:
(1)Spring 容器作为超级大工厂,负责创建、管理所有 Java 对象,这些 Java 对象被称为 Bean;
(2)Spring 容器管理容器中 Bean 之间的依赖关系,Spring 使用一种 “依赖注入” 的方式来管理 Bean 之间的关系。
对于开发者来说,使用 Spring 框架主要是做两件事:①开发 Bean;②配置 Bean。
对于 Spring 框架来说,它要做的就是根据配置文件来创建 Bean 实例,并调用 Bean 实例的方法完成“依赖注入(DI)”,这也是所谓 “控制反转(IoC)” 的本质。
Spring 不提供某种功能,它只是将所有组件部署到 Spring 中,管理、维护、执行它们。Spring 使用基本的 JavaBean 来替代 EJB,它通过 <bean> 配置来实例化 Bean,设置 Bean 的属性,以及设置 Bean 间相互的依赖性。一个 <bean> 通常需要定义 id 与 class 属性。class 属性肯定是必须的。如果配置文件中配置的其他 Bean 中引用了该 Bean,则 id 属性是必须的。Bean 则通过 id 属性相互访问。
下面我们将使用 Eclipse 创建一个简单的 Spring 的 Java 项目。不过在这之前我们得做一些准备工作,比如从官网或其他途径下载较新版本的 Spring 依赖包。从官网下载这个 Spring 依赖包的过程十分曲折。下面将演示一下在官网如何进行下载。已经下载过 spring-framework 和 commons-logging 的可直接跳过这一部分。
------------------------------------------------------------------------------------------------------------------------------------------------------------
1、打开浏览器,百度或谷歌搜索 “Spring framework”,在搜索出的页面上点击 “Spring Framework” 进入官网。
2、进入官网后,在页面右侧可以看到最近一些版本的 Spring Framework,任意点击一个版本之后的 “Reference”。笔者选择的 4.3.7 版本的。
3、进入 “reference” 页面后,找到 “Distribution Zip Files” 的字样,其实它是个超链接。建议使用 “Ctrl + F” 打开查找框,输入 “Distribution Zip Files” 在页面进行查找。
4、点击上图的 “Distribution Zip Files”,链接到如下的位置,这里可以看到给出了下载的地址。为了方便这里直接给出:各版本的下载地址。
5、点击上面的地址,可以链接到一个页面,该页面上包含了所有各个版本的 Spring Framework,选择自己想要的版本点击去,比如笔者选择的是 4.3.7 版本。
6、这回就可以真正跳转到下载的页面的,点击第一个压缩包即可。
7、下载完成后对压缩包进行解压,不需要安装。然后在根目录下的 “libs” 文件夹下就可以找到许多 Spring 的依赖包了。
8、下载完 Spring 的依赖包后,我们还需要额外下载多一个包,Spring 的依赖包中不包含这个包。commons-logging 的包用于记录和管理运行时的日志信息,我们可以从 Apache Commons Logging 找到我们需要的包进行下载。这里下载的是 commons-logging-1.2。
至此,我们就下载好了所有的依赖包,也就完成了准备工作。
------------------------------------------------------------------------------------------------------------------------------------------------------------
接下来我们将正式开始创建 Spring 项目。
1、首先一个 Java 项目,项目名命名为 “SpringStudy”。然后在项目文件夹下新建一个 “lib” 文件夹,将几个 Spring 常用的依赖包和 commons-logging-1.2 的包拷贝到该文件夹下面。并且
2、然后在项目名上右键 Build path > Configure Build Path,在 libiraries 视图下点击 add JARs,在弹出的窗口中选择刚才拷贝进 lib 文件夹下的依赖包。然后依次点击 “OK” > "Apply" > "OK",就可以把这些依赖的包添加进来了。
3、在项目文件夹的 src 文件夹下新建一个 interface 文件,用来声明一个接口,给其他类来实现这个接口及其中的抽象方法。报名命名为 “com.springstudy.spring”,接口文件名命名为 “HelloWorld”。这个接口中声明了一个 sayHello() 的方法。
package com.springstudy.spring;
public interface HelloWorld {
public String sayHello();
}
4、在上面创建的包下,新建一个 class 文件,命名为 “HelloChinaImpl”,用来实现上面定义的 HelloWorld 接口,并且实现该接口的 sayHello() 方法。在这里我们想要做的是输出 “Hello China!” 。
package com.springstudy.spring;
public class HelloChinaImpl implements HelloWorld {
@Override
public String sayHello() {
String str = "Hello China!";
return str;
}
}
5、同样在那个包下,新建一个class 文件,命名为 “HelloUSAImpl”,用来实现上面定义的 HelloWorld 接口,并且实现该接口的 sayHello() 接口。在这里我们想要做的是输出 “Hello USA!” 。
package com.springstudy.spring;
public class HelloUSAImpl implements HelloWorld {
@Override
public String sayHello() {
String str = "Hello USA!";
return str;
}
}
6、接着新建一个 “Person” 类,用来完成说话的动作。也就是人根据所在的“位置”,比如“人在中国”或者“人在美国”,从而相应地输出 “Hello China!” 和 “Hello USA!”。而这个“位置”,则是由配置文件中来配置和决定的,我们稍后会讲到这个配置文件。
package com.springstudy.spring;
public class Person implements HelloWorld {
private HelloWorld hello;
public HelloWorld getHello() {
return hello;
}
public void setHello(HelloWorld hello) {
this.hello = hello;
}
@Override
public String sayHello() {
String str = hello.sayHello();
return str;
}
}
7、然后在 src 文件夹下新建一个包,命名为 “springXML”,然后在该包下新建一个文件,命名为 “applicationContext.xml”,在该文件中定义好一个 “HelloChinaImpl” 对象的 Bean 和一个 “HelloUSAImpl” 对象的 Bean。然后再定义好一个 “Person” 类的 Bean。这个 “person” 依赖于 “hellochina” Bean 或 “hellousa” Bean。依赖于哪一个,就可以形象地将其“位置”设置为哪个。比如依赖于 “hellochina” Bean,相当于将 “HelloChinaImpl” 对象赋给 Person 类中的接口 “hello”,然后调用它的 sayHello() 方法输出 “Hello China!” 。
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="hellochina" class="com.springstudy.spring.HelloChinaImpl"></bean>
<bean id="hellousa" class="com.springstudy.spring.HelloUSAImpl"></bean>
<bean id="person" class="com.springstudy.spring.Person">
<property name="hello" ref="hellochina"></property>
</bean>
</beans>
8、最后回到 “com.springstudy.spring” 包下,创建一个 “Main.java” 文件,用来完成配置文件的读取和操作。首先根据配置文件所在的相对路径获取到配置文件,然后使用 getBean() 方法获取其中的 “person” 对象,并使用它调用 sayHello() 方法。由于在上面的配置文件中,我们将 <ref> 指向了 “hellochina” 对象,所以会调用到 HelloChinaImpl 类的对象的方法,输出 “Hello China!” 。同样地,倘若在上面的配置文件中,我们将 <ref> 指向了 “hellousa” 对象,所以会调用到 HelloUSAImpl 类的对象的方法,输出 “Hello USA!” 。
package com.springstudy.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext aContext = new ClassPathXmlApplicationContext("/springXML/applicationContext.xml");
Person person = aContext.getBean("person", Person.class);
System.out.println(person.sayHello());
}
}
9、输出结果如下:
至此,我们已经使用 Spring 完成了一个简单的 Java 项目了。