一、Spring 简介
1、Spring 概述
(1)Spring 是一款开源的免费框架,是一个轻量级控制反转(IOC)和面向切面(AOP)的 JAVA EE 框架,轻量级是指不依赖于容器就能运行的。Spring 框架最初的作者是Rod Jahnson,现在已经被Pivotal Software公司收购,而Pivotal Software公司的东家正是大名鼎鼎的虚拟化提供商VMWare。
(2)一般所谓的 Sping 指的仅仅是Spring旗下的spring framework这一款产品,在 Spring 被 Pivotal
Software 公司接手之后,相继研发出了多款产品,其中的Spring Boot、Spring Could已经成为了当前互联网环境下的佼佼者。
- Spring Boot是一个整合Spring各项功能的中间件,用于快速的开发Spring应用。
- Spring Cloud是为了应对日益增长的业务需求,而开发出的一套完整的基于微服务的分布式解决方案。
- Spring Framework、Spring Boot、Spring Cloud这三款框架的依赖是递增的,也就是说Spring - Could的基础是Spring Boot。
- Spring Boot的基础是Spring Framework,学习顺序应该是Spring Framework>Spring Boot>Spring Cloud。
(3)Spring 框架是使用最广泛的轻量级 JAVA EE 框架之一,它以 IOC、AOP 为主要思想,能够协同 Struts2、Hibernate、WebWork、JSF、iBatis 等众多的框架。
2、Spring Framework 下载
(1)Spring的官网是
https://spring.io, 通过 http://repo.spring.io/release/org/springframework/spring
可以下载Spring Framework(以后简称Spring)的开发包,如版本Spring 5.1.6,下载好jar包之后解压出的目录结构如下:
- docs:开发文档
- schema:spring框架对于xml文件的校验采用了schema的方式,该文件夹中是schema文件。
- libs:jar包,保存了spring框架的所有jar包。
- 注意:libs中保存的jar包分为3类,分别是文档jar包,源代码jar包,和编译之后的class文件jar包,我们以前导入的其他框架jar包都是最后一种class文件jar包。
(2)spring中常用jar包:
- Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现
- Spring Aspects:Spring提供的对AspectJ框架的整合
- Spring Beans:Spring IOC的基础实现,包含访问配置文件、创建和管理bean等。
- Spring Context:在基础IOC功能上提供扩展服务。
- Spring Context Support:Spring context的扩展支持,用于MVC方面。
- Spring Core:Spring的核心工具包
- Spring expression:Spring表达式语言
- Spring Instrument:Spring对服务器的代理接口
- Spring Instrument Tomcat:Spring对tomcat连接池的集成
- Spring JDBC:对JDBC 的简单封装
- Spring JMS:为简化jms api的使用而做的简单封装
- Spring orm:整合第三方的orm实现,如hibernate,ibatis,jdo以及spring 的jpa实现
- Spring oxm:Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换
- Spring test:对JUNIT等测试框架的简单封装
- Spring tx:为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。
- Spring web:包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
- Spring webmvc:包含SpringMVC框架相关的所有类
3、Spring 框架组成
Spring 是个轻量级的框架,但是它的功能却很庞大,String 框架的所有组成如图所示。
二、Spring 优点
- 低侵入式设计
- 独立于各种应用服务器
- 依赖注入特性将组件关系透明化,降低了耦合度
- 面向切面编程特性允许将通用任务进行集中式处理
- 与第三方框架的良好整合
三、Spring 两大核心技术
- 控制反转(IoC:Inversion of Control ) /依赖
注入(DI:Dependency Injection ) - 面向切面编程(AOP:Aspect Oriented Programming)
四、Hello Spring
1、导入jar包,代码如下:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
2、在pojo包下创建实体类,代码如下:
public class Hello {
private String name;
public Hello() {
}
public Hello(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("Hello,"+name);
}
@Override
public String toString() {
return "Hello{" +
"name='" + name + '\'' +
'}';
}
}
3、在resources包下编写Spring的配置文件,代码如下:
<?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就是一个java对象,由Spring管理和创建-->
<bean id="hello" class="pojo.Hello">
<property name="name" value="Spring"/>
</bean>
<!--bean就是一个java对象,由Spring管理和创建-->
<bean id="hello2" class="pojo.Hello">
<property name="name" value="WestOS"/>
</bean>
<!--// Hello hello2 = new Hello();-->
<!--// hello2.setName (WestOS)-->
</beans>
4、在test包下编写测试类,代码如下:
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloTest {
@Test
public void test(){
//解析beans.xml配置文件,生产管理相应的Bean对象;
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//通过Bean得到这个对象的实体
Hello hello = (Hello)context.getBean("hello2");
hello.show();
}
}
五、思考
Hello对象是如何创建的?
-
Hello对象是由Spring创建的
-
beans.xml ——> 管理bean,Java对象,Spring就像一个容器,存放了许多的对象
- 解析配置文件
- 通过反射创建对象并设置值
Hello对象的属性是如何设置的?
- Hello对象的属性是由Spring容器设置的
这个过程就叫控制反转:IOC
-
控制:谁来控制对象的创建?
原来:程序猿来控制
使用Spring后:Spring来控制 -
反转:程序本身不创建对象了,编程被动接收对象
依赖注入,DI:本质就是利用set方式来注入的
IOC是一种编程思想,由主动的编程转到被动的接收