Spring 學習筆記(一):Spring 入門

1 Spring簡介

Spring是一個輕量級Java開發框架,最先由Rod Johnson建立,目的是爲了解決企業級應用開發的業務邏輯層和其餘各層的耦合問題,是一個分層的Java SE/EE full-stack輕量級開源框架,爲開發Java應用程序提供全面的基礎架構支持。java

2 Spring體系結構

目前Spring已經集成了20多個模塊,分佈在如下模塊中:git

  • Core Container:核心容器
  • Data Access/Integration:數據訪問/集成
  • WebWeb模塊
  • AOPAspect Oriented Programming,面向切面編程
  • Instrumentation:植入模塊
  • Messaging:消息傳輸
  • Test:測試模塊

如圖所示:github

在這裏插入圖片描述

2.1 核心容器

Spring-coreSpring-beansSpring-contextSpring-context-supportSpring-expression等模塊組成:web

  • 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後增長了消息模塊,提供了對消息傳遞體系結構和協議的支持。spring

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模塊組成。express

  • 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文件加入:api

<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 源碼

相關文章
相關標籤/搜索