登陆

极彩论坛2018-Spring源码解析--Spring全体结构和环境建立

admin 2019-10-31 300人围观 ,发现0个评论

参阅:https://www.cnblogs.com/java-chen-hao

  • 概述
  • spring的全体架构
  • 1. Core Container
  • 2. Data Access/Integration
  • 3. Web
  • 4. AOP
  • 5. Test
  • 环境建立
  • gradle装置
  • 源码链接获取
  • 源码下载及 IDEA 导入
  • 导入项目遇见问题
  • 创立测验项目

正文

回到顶部

概述

Spring是一个开放源代码的规划层面结构,他处理的是业务逻辑层和其他各层的松耦合问题,因而它将面向接口的编程思维贯穿整个体系运用。Spring是于2003 年鼓起的一个轻量级的Java 开发结构,由Rod Johnson创立。简略来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源结构。

回到顶部

spring的全体架构

Spring结构是一个分层架构,它包括一系列的功用要素,并被分为大约20个模块,如下图所示:

从上图spring framework全体架构图能够看到,这些模块被总结为以下几个部分极彩论坛2018-Spring源码解析--Spring全体结构和环境建立:

1. Core Container

Core Container(中心容器)包括有Core、Beans、Context和Expression Language模块

Core和Beans模块是结构的根底部分,供给IoC(转操控)和依靠注入特性。这极彩论坛2018-Spring源码解析--Spring全体结构和环境建立儿的根底概念是BeanFactory,它供给对Factory形式的经典完结来消除对程序性单例形式的需求,并真实地答应你从程序逻辑中别离出依靠联系和装备。

Core模块首要包括Spring结构根本的中心东西类

Beans模块是一切运用都要用到的,它包括拜访装备文件、创立和办理bean以及进行Inversion of Control/Dependency Injection(Ioc/DI)操作相关的一切类

Context模块构建于Core和Beans模块根底之上,供给了一种类似于JNDI注册器的结构式的目标拜访办法。Context模块承继了Beans的特性,为Spring中心供给了很多扩展,增加了对国际化(如资源绑定)、事情传达、资源加载和对Context的通明创立的支撑。ApplicationContext接口是Context模块的要害

Context模块构建于Core和Beans模块根底之上,供给了一种类似于JNDI注册器的结构式的目标拜访办法。Context模块承继了Beans的特性,为Spring中心供给了很多扩展,增加了对国际化(如资源绑定)、事情传达、资源加载和对Context的通明创立的支撑。ApplicationContext接口是Context模块的要害

Expression Language模块供给了一个强壮的表达式言语用于在运行时查询和操作目标,该言语支撑设置/获取特点的值,特点的分配,办法的调用,拜访数组上下文、容器和索引器、逻辑和算术运算符、命名变量以及从Spring的IoC容器中依据称号检索目标

2. Data Access/Integration

JDBC模块供给了一个JDBC笼统层,它能够消除冗长的JDBC编码和解析数据库厂商特有的错误代码,这个模块包括了Spring对JDBC数据拜访进行封装的一切类

ORM模块为盛行的目标-联系映射API,如JPA、JDO、Hibernate、iBatis等,供给了一个交互层,运用ORM封装包,能够混合运用一切Spring供给的特性进行O/R映射,如前边说到的简略声明性业务办理

OXM模块供给了一个Object/XML映射完结的笼统层,Object/XML映射完结笼统层包括JAXB,Castor,XMLBeans,JiBX和XStream

JMS(java Message Service)模块首要包括了一些制作和消费音讯的特性

Transaction模块支撑编程和声明式事物办理,这些业务类有必要完结特定的接口,而且对一切POJO都适用

3. Web

Web上下文模块建立在运用程序上下文模块之上,为根据Web的运用程序供给了上下文,所以Spring结构支撑与Jakarta Struts的集成。Web模块还简化了处理多部分恳求以及将恳求参数绑定到域目标的作业。Web层包括了Web、Web-Servlet、Web-Struts和Web、Porlet模块

Web模块:供给了根底的面向Web的集成特性,例如,多文件上传、运用Servlet

listeners初始化IoC容器以及一个面向Web的运用上下文,它还包括了Spring长途支撑中Web的相关部分

Web-Servlet模块web.servlet.jar:该模块包括Spring的model-view-controller(MVC)完结,Spring的MVC结构使得模型范围内的代码和web forms之间能够清楚地别离开来,并与Spring结构的其他特性根底在一起

Web-Struts模块:该模块供给了对Struts的支撑,使得类在Spring运用中能够与一个典型的Struts Web层集成在一起

Web-Porlet模块:供给了用于Portlet环境和Web-Servlet模块的MVC的完结

4. AOP

AOP模块供给了一个契合AOP联盟规范的面向切面编程的完结,它让你能够界说例如办法拦截器和切点,从而将逻辑代码分隔,下降它们之间的耦合性,运用source-level的元数据功用,还能够将各种行为信息兼并到你的代码中

Spring AOP模块为根据Spring的运用程序中的目标供给了业务办理服务,经过运用Spring AOP,不必依靠EJB组件,就能够将声明性业务办理集成到运用程序中

5. Test

Test模块支撑运用Junit和TestNG对Spring组件进行测验

回到顶部

环境建立

gradle装置

Gradle是一个根据JVM极彩论坛2018-Spring源码解析--Spring全体结构和环境建立的构建东西,是一款通用灵敏的构建东西,支撑maven, Ivy库房,支撑传递性依靠办理,而不需求长途库房或者是pom.xml和ivy.xml装备文件,根据Groovy,build脚本运用Groovy编写,需求到gradle官网下载对应版别,http://services.gradle.org/distributions

windows环境下需求修正体系变量,增加GRADLE_HOME体系变量,指向grad极彩论坛2018-Spring源码解析--Spring全体结构和环境建立le根目录。环境装备成功后,在指令行输入:gradle -v 显现如下截图:

源码链接获取

1.进入官网https://projects.spring.io/spring-framework/,点击那个小猫的图画,进入github下载相应版别的spring源码。

2. 切换为最新的 Spring 5.1. x版 源码 ,获取 Git 分支链接

源码下载及 IDEA 导入

1. IDEA Spring Git 拉取分支

2. 本地装置目录设置

3. 拉取等候

也能够手动直接下载源码到本地

4.履行gradlew.bat

直接双击履行gradlew.bat即可。履行完结今后,会呈现build success的提示,可是这个时分还不算完,为了导入能导入idea中,还需求用gradlew指令去编译spring-oxm文件包。

即履行以下指令:gradlew.bat cleanIdea :spring-oxm:compileTestJava

完结后,看到如下成果,就离成功不远了。

5.I极彩论坛2018-Spring源码解析--Spring全体结构和环境建立DEA导入源码

此处的gradle运用咱们之前自己装置的4.3.1版别,不要用IDE自带的;

将jdk版别升级到1.8,由于在最新的Spring中运用到了jdk1.8的新特性,假如不升级到1.8会报错;

最终idea会主动编译spring源码,编译成功今后,一切的模块都会有个小小的蓝色图标,表明编译成功,至此spring源码导入完结。

导入项目遇见问题

1.No such property: immutableValues for class: org.gradle.api.internal.tasks.DefaultTaskDependency

修正:spring-beans.gradle

注释掉这两行代码
//def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues
//compileGroovy.dependsOn = deps - 'compileJava'

2.Could not find method useJUnitPlatform()

注释:spring-test.gradle中这行代码
// useJUnitPlatform {
// includeEngines 'junit-jupiter'
// excludeTags 'failing-test-case'
// }

回到顶部

创立测验项目

引荐博客

程序员写代码之外,怎么再赚一份薪酬?

导入成功之后能够在project下创立一个自己的测验module

1.项目根目录右键 -> new -> module -> gradle

2.在新项目的build.gradle下增加对spring模块的依靠,这儿我先增加了spring-beans 和spring-core的依靠。

dependencies {
compile(project(":spring-beans"))
compile(project(":spring-core"))
testCompile group: 'junit', name: 'junit', version: '4.12'
}

3.在新项目的src/ma极彩论坛2018-Spring源码解析--Spring全体结构和环境建立in/resource下增加spring-config.xml文件



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">


4.创立测验bean和发动类

package com.chenhao.spring;
/**
* @author: ChenHao
* @Description:
* @Date: Created in 10:35 2019/6/19
* @Modified by:
*/
public class MyTestBean {
private String name = "ChenHao";
public MyTestBean(String name) {
this.name = name;
}
public MyTestBean() {
}
@Override
public String toString() {
return "MyTestBean{" +
"name='" + name + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

import com.chenhao.spring.MyTestBean;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
/**
* @author: ChenHao
* @Description:
* @Date: Created in 10:36 2019/6/19
* @Modified by:
*/
public class AppTest {
@Test
public void MyTestBeanTest() {
BeanF二次元性感actory bf = new XmlBeanFactory( new ClassPathResource("spring-config.xml"));
MyTestBean myTestBean = (MyTestBean) bf.getBean("myTestBean");
System.out.println(myTestBean.getName());
}
}

 每天前进一点点,抱负终将会完结 

个人大众号:码农小福
请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP