Spring
簡介Spring
是一個輕量級Java
開發框架,最先由Rod Johnson
建立,目的是爲了解決企業級應用開發的業務邏輯層和其餘各層的耦合問題,是一個分層的Java SE/EE full-stack
輕量級開源框架,爲開發Java
應用程序提供全面的基礎架構支持。java
Spring
體系結構目前Spring
已經集成了20多個模塊,分佈在如下模塊中:git
Core Container
:核心容器Data Access/Integration
:數據訪問/集成Web
:Web
模塊AOP
:Aspect Oriented Programming
,面向切面編程Instrumentation
:植入模塊Messaging
:消息傳輸Test
:測試模塊如圖所示:github
由Spring-core
、Spring-beans
、Spring-context
、Spring-context-support
、Spring-expression
等模塊組成:web
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
規定的統一表達式語言的擴展AOP
和Instrumentation
Spring-aop
:提供了一個符合AOP
要求的面向切面的編程實現,容許定義方法攔截器和切入點Spring-aspects
:提供了與AspectJ
的集成功能,AspectJ
是一個功能強大且成熟的AOP
框架Spring-instrumentation
:提供了類植入支持和類加載器的實現Spring 4.0
後增長了消息模塊,提供了對消息傳遞體系結構和協議的支持。spring
數據訪問/集成層由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
類的編程和聲明式事務管理Web
Web
有Spring-Web
、Spring-WebMVC
、Spring-WebSocket
和Portlet
模塊組成。express
Spring-Web
:提供了基本的Web
開發集成功能,例如多文件上傳等Spring-WebMVC
:也叫Web-Servlet
模塊,包含用於Web
應用程序的Spring MVC
和REST Web Services
的實現。Spring-WebSocket
:提供了WebSocket
和SockJS
的實現Porlet
:相似於Servlet
模塊的功能,提供了Porlet
環境下MVC
的實現Spring-test
模塊支持使用JUnit
或TestNG
對Spring
組件進行單元測試和集成測試。編程
OpenJDK 11.0.8
IDEA 2020.2
Maven
/Gradle
Demo
(Java
版)Maven
工程
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>
能夠戳這裏查看最新的版本。緩存
新建以下5個空文件:
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
。
TestInterface
public interface TestInterface { void hello(); }
TestImpl
public class TestImpl implements TestInterface { @Override public void hello() { System.out.println("Hello Spring."); } }
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(); } }
Tests
public class Tests { @Test public void test() { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); TestInterface testInterface = (TestInterface)context.getBean("test"); testInterface.hello(); } }
直接點擊測試類旁邊的按鈕便可:
若出現以下錯誤:
是JDK
版本設置錯誤的問題,先打開Project Structure
,修改Modules
下的JDK
版本:
下一步是打開設置,修改Comiler
下的JDK
版本:
輸出:
Main
默認不能直接運行Main
函數,須要添加運行配置:
選擇Application
添加配置,而且指定Name
以及Main class
:
這樣就能夠運行了:
Kotlin
版Demo
使用Gradle
+Kotlin
的入門Demo
。
Gradle
工程
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" } }
除了添加依賴之外還添加了一些其餘參數。
TestInterface
interface TestInterface { fun hello() }
TestImpl
class TestImpl:TestInterface { override fun hello() { println("Hello Spring") } }
Main
fun main() { println("Hello") val context: ApplicationContext = ClassPathXmlApplicationContext("applicationContext.xml") val test: TestInterface = context.getBean("test") as TestInterface test.hello() }
applicationContext.xml
同上。
Tests
class Tests { @Test fun test() { val context:ApplicationContext = ClassPathXmlApplicationContext("applicationContext.xml") val test:TestInterface = context.getBean("test") as TestInterface test.hello() } }
一樣直接點擊旁邊的按鈕便可運行:
Main
一樣點擊按鈕便可: