1 Spring简介
Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,是一个分层的Java SE/EE full-stack轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。
2 Spring体系结构
目前Spring已经集成了20多个模块,分布在以下模块中:
- Core Container:核心容器
- Data Access/Integration:数据访问/集成
- Web:- Web模块
- AOP:- Aspect Oriented Programming,面向切面编程
- Instrumentation:植入模块
- Messaging:消息传输
- Test:测试模块
如图所示:

2.1 核心容器
由Spring-core、Spring-beans、Spring-context、Spring-context-support、Spring-expression等模块组成:
- Spring-core:提供了框架的基本组成部分,包括- Ioc(- Inversion of Control,控制反转)以及- DI(- Dependency Injection,依赖注入)功能
- Spring-beans:提供了- BeanFactory,是工厂模式的一个典型实现,**- Spring将管理的对象称为- Bean**
- Spring-context:建立在- Core和- Beans模块的基础上,提供了一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介,- ApplicationContext接口是- Context模块的焦点
- Spring-context-support:支持整合第三方库到- Spring应用程序上下文,特别是用于高速缓存(- EhCache、- JCache)和任务调度(- CommonJ、- Quartz)的支持
- Spring-expression:提供了强大的表达式语言去支持运行时查询和操作对象图,是- JSP 2.1规定的统一表达式语言的扩展
2.2 AOP和Instrumentation
- Spring-aop:提供了一个符合- AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点
- Spring-aspects:提供了与- AspectJ的集成功能,- AspectJ是一个功能强大且成熟的- AOP框架
- Spring-instrumentation:提供了类植入支持和类加载器的实现
2.3 消息
Spring 4.0后增加了消息模块,提供了对消息传递体系结构和协议的支持。
2.4 数据访问/集成
数据访问/集成层由JDBC、ORM、OXM、JMS和事务模块组成。
- Spring-JDBC:提供了一个- JDBC抽象层,消除了繁琐的- JDBC编码和数据库厂商特有的错误代码解析
- Spring-ORM:为流行的- ORM(- Object-Relational Mapping,对象关系映射)框架提供了支持,包括- JPA和- Hibernate,使用- Spring-ORM框架可以将这些- O/R映射框架与- Spring提供的所有其他功能结合使用
- Spring-OXM:提供了一个支持对象/- XML映射的抽象层实现,例如- JAXB、- Castor、- JiBX、- XStream
- Spring-JMS:- JMS(- Java Messaging Service,- Java消息传递服务),包含用于生产和使用消息的功能
- Spring-TX:事务管理模块,支持用于实现特殊接口和所有- POJO类的编程和声明式事务管理
2.5 Web
Web有Spring-Web、Spring-WebMVC、Spring-WebSocket和Portlet模块组成。
- Spring-Web:提供了基本的- Web开发集成功能,例如多文件上传等
- Spring-WebMVC:也叫- Web-Servlet模块,包含用于- Web应用程序的- Spring MVC和- REST Web Services的实现。
- Spring-WebSocket:提供了- WebSocket和- SockJS的实现
- Porlet:类似于- Servlet模块的功能,提供了- Porlet环境下- MVC的实现
2.6 测试
Spring-test模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。
3 环境
- OpenJDK 11.0.8
- IDEA 2020.2
- Maven/- Gradle
4 入门Demo(Java版)
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>
这里声明了一个id为test,类为TestImpl的Bean。
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 Kotlin版Demo
使用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
同样点击按钮即可:


 
  
  
  
 
 
  
 
 
 