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

Spring 学习笔记(一):Spring 入门的更多相关文章

  1. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  2. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

  3. Spring 学习笔记(2) Spring Bean

    一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...

  4. Spring学习笔记之Spring概述

    概述   Spring是一个java应用最广的开源框架,它是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Deve ...

  5. Spring学习笔记之五----Spring MVC

    Spring MVC通常的执行流程是:当一个Web请求被发送给Spring MVC Application,Dispatcher Servlet接收到这个请求,通过HandlerMapping找到Co ...

  6. Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式

     本节主要内容:    1. 给MessageBean注入参数值    2. 测试Spring自动组件扫描方式    3. 如何控制ExampleBean实例化方式    4. 使用注解方式重构Jdb ...

  7. Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入

    本节主要内容:       1.实例化Spring容器示例    2.利用Spring容器创建JavaBean对象    3.如何控制Bean实例化    4.利用Spring实现bean属性sett ...

  8. spring学习笔记之spring框架本质

    Spring框架的本质是,开发者在Spring配置文件中使用XML元素进行配置,实际驱动Spring执行相应的代码: 使用<bean.../>元素,实际启动Spring执行无参或有参构造函 ...

  9. Spring学习笔记2:Spring HelloWorld

    1:IntelliJ新建Maven工程 2:pom文件加入Spring依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  10. [Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction

    1.Spring中的数据库支持 把具有相同功能的代码模板抽取到一个工具类中.2.关于jdbc template的应用 jdbcTemplate模板操作类,把访问jdbc的模板抽取到template中, ...

随机推荐

  1. JavaScript 中的执行上下文和执行栈

    JavaScript - 原理系列 ​ 在日常开发中,每当我们接手一个现有项目后,我们总喜欢先去看看别人写的代码.每当我们看到别人写出很酷的代码的时候,我们总会感慨!写出这么优美而又简洁的代码的兄弟到 ...

  2. 关于MVCC,我之前写错了,这次我改好了!

    关于MVCC的原理,在<我想进大厂>之mysql夺命连环13问写过一次,但是当时写的其实并不准确,这个理解可以应付面试,帮助快速理解,但是他的真正实现原理我想再次拿出来说一说. 简单理解版 ...

  3. List转String数组 collection.toArray(new String[0])中new String[0]的语法解释

    Collection的公有方法中,toArray()是比较重要的一个. 但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]. 虽然Object数组也不是不能用,但当你 ...

  4. Element-UI远程搜索功能详解

    官方代码: <template> <div> <el-autocomplete v-model="state" :fetch-suggestions= ...

  5. Error Code: 1366. Incorrect DECIMAL value: '0' for column '' at row -1 0.266 sec;

    Reference: https://stackoverflow.com/questions/35037288/incorrect-decimal-integer-value-mysql     Er ...

  6. oracle check datapump jobs

    reference: https://asktom.oracle.com/pls/apex/asktom.search?tag=getting-ora-31626-job-does-not-exist ...

  7. Svelte 码半功倍

    你未注意到的最重要的指标. 注意:原文发表于2019-04-20,随着框架不断演进,部分内容可能已不适用. 所有代码都有 BUG,你写的越多,BUG 越多,这很合情合理. 同时,写的越多,费时越多,留 ...

  8. 178. 分数排名 + MySql + RANK() OVER

    178. 分数排名 LeetCode_MySql_178 题目描述 题解分析 排名函数 DENSE_RANK().如果使用 DENSE_RANK() 进行排名会得到:1,1,2,3,4. RANK() ...

  9. 谈一谈C#的事件

    谈一谈C#的事件 C#中事件基于委托,要理解事件要先理解委托,如果觉得自己关于委托不是很了解可以看看我前面写委托的文章 事件基于委托,是一种功能受限的委托,为委托提供了一种发布/订阅机制 使用委托时, ...

  10. 话说CAS

    一.前言 cas 一般认为是compare and swap 也可以认为是compare and set cas涉及三个值 1)P 变量内存地址 2)E 期望值 ,CPU做计算之前拿出来的旧值 3) ...