Spring是一个轻量级反转控制(IOC)和面向切面编程的开源的容器框架,其为简化企业级应用开发而生,即使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能。
1. Spring框架
1.1 概述
特点:框架、轻量级、反转控制、面向切面编程、容器、一站式,具体说明如下:
- 框架: Spring使用简单的组件配置即可组合成一个复杂应用,可以使用XML或Java注解的方式来组合这些对象;
- 轻量级: Spring是非侵入式的,即基于Spring开发的应用中的对象可以不依赖于Spring的API;
- 反转控制: IoC,同依赖注入(Dependency Injection,简称DI);
- 面向切面编程: Aspect Oriented Programming,简称AOP;
- 容器: Spring包含且管理着应用对象的生命周期;
- 一站式: 在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring自身也提供了展现层的SpringMVC和持久层的Spring JDBC)。
1.2 Spring模块
1.3 插件安装
Spring插件可使Spring程序的开发更为简单方便,因此需要在开发前安装插件到Eclipse中;在此,选择的安装文件为springsource-tool-suite-3.4.0.RELEASE-e4.3.1-updatesite.zip,安装时仅选择和Spring IDE相关的四个即可。
2. IoC和DI概述
反转控制(Inversion of Control,简称IoC)的思想是反转资源获取的方向;传统的资源查找方式要求组件向容器发起请求,容器适时的返回资源;而IoC容器是主动地将资源推送给其所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源,该行为也被称为查找的被动形式。
依赖注入(Dependency Injection,简称DI)是IoC的另一种表述方式,即组件以一些预先定义好的方式(如setter方法)接受来自如容器的资源注入。
IoC的前生——分离接口与实现:
IoC的前生——采用工厂设计模式:
IoC的现在——采用反转控制:
3. 实现步骤
3.1 添加所依赖的jar包
3.2 添加Spring配置文件:
一个典型的Spring项目需要创建一个或多个Bean配置文件,用于在Spring IOC容器里配置Bean;Bean的配置文件可以放在classpath下,也可以放在其它目录下。
<!-- src/helloWorld.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 id="helloWorld" class="com.qiaobc.spring.beans.HelloWorld">
<property name="name" value="Android"></property>
</bean>
</beans>
3.3 建立Spring项目
TestMain.java:
package com.qiaobc.spring.beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
/**
* 使用spring框架实现方法调用
* 1. 创建spring的IOC容器
* 2. 从IOC容器中获取对应的JavaBean
* 3. 调用方法
*
* 反转控制(IOC)与依赖注入(DI):
* 以往的资源获取方式是,组件向容器发起请求,容器查找资源并将其适时返回
* 反转控制引入后,资源获取方式是,容器将资源推送给其所管理的组件,组件选择一种合适的方式来被动接收。
*
*/
/**
* 无框架实现步骤:
* 实例化 -> 设置属性 -> 调用方法
*/
// HelloWorld helloWorld = new HelloWorld();
// helloWorld.setName("java");
// helloWorld.sayHello();
/**
* 基于Spring框架实现
*/
// 1. 创建Spring的IoC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("helloBean.xml");
// 2. 从IoC容器中获取Bean
HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
// 3. 调用方法
helloWorld.sayHello();
}
}
HelloWorld.java:
package com.qiaobc.spring.beans;
public class HelloWorld {
private String name;
public void setName(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello:" + name);
}
}