1 Spring简介

Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,是一个分层的Java SE/EE full-stack轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。

2 Spring体系结构

目前Spring已经集成了20多个模块,分布在以下模块中:

  • Core Container:核心容器
  • Data Access/Integration:数据访问/集成
  • WebWeb模块
  • AOPAspect Oriented Programming,面向切面编程
  • Instrumentation:植入模块
  • Messaging:消息传输
  • Test:测试模块

如图所示:

在这里插入图片描述

2.1 核心容器

Spring-coreSpring-beansSpring-contextSpring-context-supportSpring-expression等模块组成:

  • Spring-core:提供了框架的基本组成部分,包括IocInversion of Control,控制反转)以及DIDependency Injection,依赖注入)功能
  • Spring-beans:提供了BeanFactory,是工厂模式的一个典型实现,Spring将管理的对象称为Bean
  • Spring-context:建立在CoreBeans模块的基础上,提供了一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介,ApplicationContext接口是Context模块的焦点
  • Spring-context-support:支持整合第三方库到Spring应用程序上下文,特别是用于高速缓存(EhCacheJCache)和任务调度(CommonJQuartz)的支持
  • Spring-expression:提供了强大的表达式语言去支持运行时查询和操作对象图,是JSP 2.1规定的统一表达式语言的扩展

2.2 AOPInstrumentation

  • Spring-aop:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点
  • Spring-aspects:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架
  • Spring-instrumentation:提供了类植入支持和类加载器的实现

2.3 消息

Spring 4.0后增加了消息模块,提供了对消息传递体系结构和协议的支持。

2.4 数据访问/集成

数据访问/集成层由JDBCORMOXMJMS和事务模块组成。

  • Spring-JDBC:提供了一个JDBC抽象层,消除了繁琐的JDBC编码和数据库厂商特有的错误代码解析
  • Spring-ORM:为流行的ORMObject-Relational Mapping,对象关系映射)框架提供了支持,包括JPAHibernate,使用Spring-ORM框架可以将这些O/R映射框架与Spring提供的所有其他功能结合使用
  • Spring-OXM:提供了一个支持对象/XML映射的抽象层实现,例如JAXBCastorJiBXXStream
  • Spring-JMSJMSJava Messaging ServiceJava消息传递服务),包含用于生产和使用消息的功能
  • Spring-TX:事务管理模块,支持用于实现特殊接口和所有POJO类的编程和声明式事务管理

2.5 Web

WebSpring-WebSpring-WebMVCSpring-WebSocketPortlet模块组成。

  • Spring-Web:提供了基本的Web开发集成功能,例如多文件上传等
  • Spring-WebMVC:也叫Web-Servlet模块,包含用于Web应用程序的Spring MVCREST Web Services的实现。
  • Spring-WebSocket:提供了WebSocketSockJS的实现
  • Porlet:类似于Servlet模块的功能,提供了Porlet环境下MVC的实现

2.6 测试

Spring-test模块支持使用JUnitTestNGSpring组件进行单元测试和集成测试。

3 环境

  • OpenJDK 11.0.8
  • IDEA 2020.2
  • Maven/Gradle

4 入门DemoJava版)

4.1 新建Maven工程

在这里插入图片描述

在这里插入图片描述

4.2 引入依赖

pom.xml文件加入:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.2.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.2.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.2.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.2.8.RELEASE</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.6.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

可以戳这里查看最新的版本。

4.3 新建文件

新建如下5个空文件:

在这里插入图片描述

4.4 applicationContext.xml

该文件是Spring的配置文件,习惯命名为applicationContext.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="test" class="TestImpl"/>
</beans>

这里声明了一个idtest,类为TestImplBean

4.5 TestInterface

public interface TestInterface {
    void hello();
}

4.6 TestImpl

public class TestImpl implements TestInterface {
    @Override
    public void hello() {
        System.out.println("Hello Spring.");
    }
}

4.7 Main

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello");
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        ((TestInterface)context.getBean("test")).hello();
    }
}

4.8 Tests

public class Tests {
    @Test
    public void test()
    {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TestInterface testInterface = (TestInterface)context.getBean("test");
        testInterface.hello();
    }
}

4.9 运行

4.9.1 测试

直接点击测试类旁边的按钮即可:

在这里插入图片描述

若出现如下错误:

在这里插入图片描述

JDK版本设置错误的问题,先打开Project Structure,修改Modules下的JDK版本:

在这里插入图片描述

下一步是打开设置,修改Comiler下的JDK版本:

在这里插入图片描述

输出:

在这里插入图片描述

4.9.2 Main

默认不能直接运行Main函数,需要添加运行配置:

在这里插入图片描述

选择Application添加配置,并且指定Name以及Main class

在这里插入图片描述

这样就可以运行了:

在这里插入图片描述

5 KotlinDemo

使用Gradle+Kotlin的入门Demo

5.1 新建Gradle工程

在这里插入图片描述

在这里插入图片描述

5.2 build.gradle

完整文件如下:

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.4.0'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.springframework', name: 'spring-context', version: '5.2.8.RELEASE'
    compile group: 'org.springframework', name: 'spring-core', version: '5.2.8.RELEASE'
    compile group: 'org.springframework', name: 'spring-beans', version: '5.2.8.RELEASE'
    testCompile group: 'junit', name: 'junit', version: '4.12'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}
compileKotlin {
    kotlinOptions {
        jvmTarget = "11"
    }
}

除了添加依赖以外还添加了一些其他参数。

5.3 新建文件夹以及文件

在这里插入图片描述

5.4 TestInterface

interface TestInterface {
    fun hello()
}

5.5 TestImpl

class TestImpl:TestInterface
{
    override fun hello() {
        println("Hello Spring")
    }
}

5.6 Main

fun main() {
    println("Hello")
    val context: ApplicationContext = ClassPathXmlApplicationContext("applicationContext.xml")
    val test: TestInterface = context.getBean("test") as TestInterface
    test.hello()
}

5.7 applicationContext.xml

同上。

5.8 Tests

class Tests {
    @Test
    fun test()
    {
        val context:ApplicationContext = ClassPathXmlApplicationContext("applicationContext.xml")
        val test:TestInterface = context.getBean("test") as TestInterface
        test.hello()
    }
}

5.9 运行

5.9.1 测试

在这里插入图片描述

同样直接点击旁边的按钮即可运行:

在这里插入图片描述

5.9.2 Main

同样点击按钮即可:

在这里插入图片描述

在这里插入图片描述

6 源码


氷泠
420 声望647 粉丝