一、Spring framework
即Spring,是其他Spring全家桶的基础和核心:包括SpringMVC、SpringBoot、SpringCloud、SpringData、SpringSecurity。
Spring由Rod Johnson创立,2004年发布了Spring框架的第一版,其目的是用户简化企业级开发的难度和周期。
1.1、核心
Spring是分层的JavaSE/EE一站式轻量级开源框架,以IoC(Inverse of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心。
1.2、IoC
IoC(Inverse of Control,控制反转)指的是将对象的创建交给Spring去创建。使用Spring之前,对象的创建都是new 创建,而使用Spring之后,对象的创建都交给Spring框架。
1.3、AOP
AOP(Aspect Oriented Programming,面向切面编程)用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP还能解决一些系统层面上的问题,比如日志、事务、权限等。
1.4、Bean
Spring中,认为一切Java类都是资源,而资源都是类的实例对象Bean,容纳并管理这些Bean的是Spring的IoC容器,所以Spring是一种基于Bean的编程。
1.5、三层体系架构
实际开发工作中,服务端采用三层体系架构,分别为表现层web、逻辑层service、持久层dao。
Spring在表现层提供了与SpringMV、Struts2框架的整合,在业务逻辑层可以管理实务和记录日志等,在持久层可以整合MyBatis、Hibernate、JdbcTemplate。
1.6、Spring的特点
- 方便解耦,简化开发:将所有对象的创建和依赖关系维护交给Spring管理。
- 方便集成各种优秀框架:Spring内部提供了对各种优秀框架(Struts2、Hibernate、MyBatis)的直接支持。
- 降低了Java EE API使用难度:对JAVA EE开发中一些API(JDBC、JavaMail、远程调用)都提供了封装。
- 方便程序测试:支持JUnit4,可以通过注解方便地测试Spring程序。
- AOP变成支持:面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
- 声明式事务:通过配置就可以完成对事务的管理,无需编程。
二、Spring的体系结构
2.1、Spring Framework Runtime
Spring主要模块:
- Data Access/Integration(数据访问与集成)
- Web
- AOP
- Aspects
- Instrumentation(检测)
- Messaging(消息处理)
- Core Container(核心容器)
- Test
2.2、Data Access/Integration(数据访问/集成)
包含模块:JDBC、ORM、OXM、JMS、Transaction
- JDBC:提供了一个JDBC样例模板,消除冗长JDBC编码和必须的事务控制
- ORM:提供了与“对象-关系”映射框架集成的API,包括JPA、JDO、Hibernate、MyBatis等。
- OXM:提供了Object/XML映射的抽象层实现,如JAXB、Castor、XMLBean、JiBX、XStream。将java对象映射成为XML数据,或者将XML数据映射成java对象。
- JMS:java消息服务,提供了一套“消息生产者、消息消费者”模板,JMS用于两个应用程序之间,或者分布式系统中发送消息,进行异步通信。
- Transaction:支持编程和声明式事务管理。
2.2、Web
包括组件:Web、servlet、websocket、portlet
- Web:提供了基本web集成特性,例如:多文件上传、使用Servlet监听器的IoC容器初始化以及web应用上下文。
- servlet:提供了SpringMVC Web框架实现。SpringMVC提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等以及一套非常简易的JSP标签。
- WebSocket:提供了简单的接口,用户只需要实现接口就可以快速搭建websocket server,从而实现双向通讯。
- Portlet:提供了Portlet环境中MVC实现。
2.3、Core Container(Spring的核心容器)
是其他模块建立的基础,由Beans模块、Core核心模块、Context上下文模块和SpEL表达式语言模块组成。
- Beans模块:提供了框架的基础部分,包括控制反转和依赖注入。
- Core核心模块:封装了Spring框架的底层部分,包括资源访问、类型转换及一些常用工具类
- Context上下文模块:建立在Core和Beans模块的基础之上,集成Beans模块并添加资源绑定、数据验证、国际化、Java EE支持、容器生命周期、事件传播等。
- SpEL:提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量、支持算数和逻辑运算,支持从Spring中获取Bean
2.4、AOP、Aspects、Instrumentation和Messaging
- AOP:提供了面向切面编程,提供了比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态把这些功能添加到需要的代码中。
- Aspects:提供与AspectJ的集成,是一个功能强大且成熟的面向切面编程框架。
- InStrumentation:提供了类工具的支持和类加载器的实现。
- Messaging:提供了对消息传递体系结构和协议的支持。
2.5、Test模块
Spring支持Junit和TestNG测试框架,而且还额外提供了一些基于Spring的测试功能。
三、开发环境
Spring开发需要JDK、Tomcat、Eclipse(或Idea)
3.1、必要组件
- commons-logging-1.2
- spring-core-x.x.xx.RELEASE.jar
- spring-beans-x.x.xx.RELEASE.jar
- spring-context-x.x.xx.RELEASE.jar
- spring-expression-x.x.xx.RELEASE.jar
3.2、介绍
名称 | 作用 |
---|---|
spring-core-x.x.xx.RELEASE.jar | 包含 Spring 框架基本的核心工具类,Spring 其他组件都要用到这个包中的类,是其他组件的基本核心。 |
spring-beans-x.x.xx.RELEASE.jar | 所有应用都要用到的,它包含访问配置文件、创建和管理 Bean 以及进行 Inversion of Control(IoC)或者 Dependency Injection(DI)操作相关的所有类。 |
spring-context-x.x.xx.RELEASE.jar | Spring 提供在基础 IoC 功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI 定位、EJB 集成、远程访问、缓存以及各种视图层框架的封装等 |
spring-expression-x.x.xx.RELEASE.jar | 定义了 Spring 的表达式语言。需要注意的是,在使用 Spring 开发时,除了 Spring 自带的 JAR 包以外,还需要一个第三方 JAR 包 commons.logging 处理日志信息 |
使用 Spring 框架时,只需将 Spring 的 4 个基础包以及 commons-logging-1.2.jar 包复制到项目的 lib 目录,并发布到类路径中即可。
3.3、简单的Spring程序
package com.jsonliu.bean;
/**
* @Author: JSONLiu
* @Description:
* @Date Created in 2021-11-28 17:12
* @Modified By:
*/
public class HelloWorld {
private String message;
public void setMessage(String message) {
this.message = message;
}
public void getMessage() {
System.out.println("message : " + message);
}
}
package com.jsonliu.main;
import com.jsonliu.bean.HelloWorld;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @Author: JSONLiu
* @Description:
* @Date Created in 2021-11-28 17:12
* @Modified By:
*/
public class MainApp {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld");
helloWorld.getMessage();
}
}
<?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-3.0.xsd">
<bean id="helloWorld" class="com.jsonliu.bean.HelloWorld">
<property name="message" value="Hello World!" />
</bean>
</beans>