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. 《Effective Java》总结

    导语 <Effective Java>是和<Thinking in java>齐名的java进阶书籍.作者参与了JDK标准库的编写工作,对于此书的学习,让我收获很多.好记性不如 ...

  2. 【HTB系列】靶机Vault的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Kali: 10.10.14.213 靶机地址:10.10.10.109 先用nmap探 ...

  3. 进位&&大数字符串处理

    Have Fun with Numbers Notice that the number 123456789 is a 9-digit number consisting exactly the nu ...

  4. Mock 框架 Moq 的使用

    Mock 框架 Moq 的使用 Intro Moq 是 .NET 中一个很流行的 Mock 框架,使用 Mock 框架我们可以只针对我们关注的代码进行测试,对于依赖项使用 Mock 对象配置预期的依赖 ...

  5. 记客户端WebBrowser控件修改版本的问题

    保留在本地电脑的一篇记录,第二条描述是在网上看来的,忘记在哪看的了,也就没注明出处,望见谅. 1.Winform内置浏览器控件的底层调用与系统IE浏览器的底层调用相同. 2.IE8 对渲染引擎做了很大 ...

  6. Python基础【while循环】

    Python基础[while循环] 1.while循环: 格式 while 条件: ...... print(......) 注意,在while语句也可以嵌套else,但是else不执行循环,执行后直 ...

  7. 数据搬运组件:基于Sqoop管理数据导入和导出

    本文源码:GitHub || GitEE 一.Sqoop概述 Sqoop是一款开源的大数据组件,主要用来在Hadoop(Hive.HBase等)与传统的数据库(mysql.postgresql.ora ...

  8. SpringMVC请求映射handler源码解读

    请求映射源码 首先看一张请求完整流转图(这里感谢博客园上这位大神的图,博客地址我忘记了): 前台发送给后台的访问请求是如何找到对应的控制器映射并执行后续的后台操作呢,其核心为DispatcherSer ...

  9. 手把手教你docker安装宝塔面板

    手把手教你docker安装宝塔面板(针对小白提一下:需要先安装docker,安装docker的教程请自行百度,非常简单的),docker安装宝塔面板教程如下: 一.拉取centos镜像(当然这里拉取别 ...

  10. 攻防世界 reverse 进阶 15-Reversing-x64Elf-100

    15.Reversing-x64Elf-100 这题非常简单, 1 signed __int64 __fastcall sub_4006FD(__int64 a1) 2 { 3 signed int ...