你好呀,我是沉默王二,一个和黄家驹一样身高,刘德华一样颜值的程序员(管你信不信呢)。从两位偶像的年纪上,你就可以断定我的码龄至少在 10 年以上,但实话实说,我一直坚信自己只有 18 岁,因为我有一颗好学的心。本篇文章就打算通过我和三妹对话的形式来学一学“Spring 的基础”。

教妹学 Java,没见过这么放肆的标题吧?“语不惊人死不休”,没错,本篇文章的标题就是这么酷炫,不然你怎么会点进来?

我有一个漂亮如花的妹妹(见上图),她叫什么呢?我想聪明的读者能猜得出:沉默王三,没错,年方三六。父母正考虑让她向我学习,做一名正儿八经的 Java 程序员。我期初是反对的,因为程序员这行业容易掉头发。但家命难为啊,与其反对,不如做点更积极的事情,比如说写点有趣的文章教教她。

“二哥,你怎么现在才想起来要教我学 Spring 啊?”

“没办法啊,三妹,之前教妹学 Java 系列被喷的体无完肤,没办法就停滞了。今天决定走自己的路,让别人也走自己的路去。”

“我就说嘛,Spring 在 Java 中占据那么重要的位置,你竟然没舍得教我,还以为你怕被我拍死在沙滩上呢?”

“嗯,你天真了。”

01、Spring 简史

“二哥,据说 Spring 前后经历了 3 个时代,你能给我说说吗?”

“没问题啊。”

1)石器时代

也就是 Spring 1.x 时代,一个项目看上去全都是 xml 文件,里面配置着各种各样的 bean,项目越大,xml 文件就越多,到最后人都感觉不好了,像回到了原始社会。

2)黑铁时代

也就是 Spring 2.x 时代,终于可以使用注解配置 bean 了,这主要得益于 JDK 1.5 新增的注解功能。想一想,一个小小的注解,比如说 @Component 、@Service 就可以替代一大段的 xml 配置代码,简直爽歪歪啊。

使用 xml 文件配置数据源,使用注解配置业务类,两种方式相得益彰。

3)黄金时代

也就是 Spring 3.x 至今,可以使用 Java 配置的方式了。那什么是 Java 配置呢?

其实从形式上看,Java 配置和注解配置没什么区别,因为 Java 配置也用的是注解,只不过,以前用 application-context.xml 配置数据源等信息,现在用 @Configuration 注解的类配置。

02、Spring 特性

“二哥,据说 Spring 的特性非常丰富,你能给我说说吗?”

“没问题啊。”

1)核心技术:依赖注入(DI)、面向切面编程(AOP)、国际化、数据绑定、类型转换

2)测试:TestContext 框架、Spring MVC 测试

3)数据访问:事务、JDBC、对象关系映射(ORM)

4)Spring MVC(一个模型 - 视图 - 控制器「MVC」的 Web 框架)、Spring WebFlux(一个典型非阻塞异步的框架)

5)Spring Integration(面向企业应用集成)

03、Spring 生态

“二哥,据说 Spring 的生态圈非常火热,你能给我说说吗?”

“没问题啊。”

1)Spring Boot:当下最火的一个 Spring 项目了,使用它我们可以快速搭建好一个项目

2)Spring Cloud:为分布式开发提供了强大的工具集

3)Spring Security:通过认证和授权保护应用

4)Spring Web Flow:基于 Spring MVC 的流程式 Web 应用

5)等等等等

04、快速搭建 Spring 项目

“二哥,说了那么多,能不能来个上手项目,让我瞧瞧 Spring 项目到底长什么样子?”

“马上就来,三妹。”

我推荐使用 Intellij IDEA 作为集成开发工具,因为它插件丰富、功能全面。就我们目前的开发任务来说,社区版足够用了。

1)打开 IDEA,依次点击 File→New→Project→Maven。

2)点击 Next 后填写项目的名称,然后创建项目。打开 pom.xml 文件,添加以下内容。

org.springframework

spring-context

5.2.2.RELEASE

org.apache.maven.plugins

maven-compiler-plugin

3.6.1

1.8

1.8

dependencies 节点下添加了 Spring 的核心依赖 spring-context,它为 Spring 提供了一个运行时的环境,用以保存各个对象的状态。它依赖于 Spring 的四个核心组件:spring-aop、spring-beans、spring-core、spring-expression,也就是说只要引入 spring-context 的依赖,Maven 会自动引入这四个核心。

build 节点下添加了 Maven 的编译插件,并且指定了 Java 的编译版本为 1.8。

3)IDEA 下编辑文件会自动保存,所以与此同时,Maven 会将 Spring 的依赖包全部下载到本地仓库中。

4)稍稍眯一会眼睛,就可以看到 Spring 的依赖包了。

5)Maven 是一个软件项目管理工具,基于项目对象模型(Project Object Model,明白 pom.xml 的由来了吧?)的概念,可以管理项目依赖的 jar 包,对项目进行编译打包等。

6)新建 HelloService 类,代码如下:

@Service

public class HelloService{

public void hello (String what){

System.out.println("hello " + what);

}

}

@Service 注解一般在业务逻辑层使用。该类非常简单,只有一个方法 hello(),参数是字符串,然后在控制台打印 hello xxx。

7)新建 HelloConfig 类,代码如下:

@Configuration

public class HelloConfig{

@Bean

public HelloService helloService(){

return new HelloService();

}

}

@Configuration 注解表明当前类是一个配置类,相当于 Spring 配置的一个 xml 文件。

@Bean 注解用在 helloService() 方法上,表明当前方法返回一个 Bean 对象(HelloService),然后将其交给 Spring 管理。产生这个 Bean 对象的方法只会被调用一次,随后 Spring 将其放在自己的 IOC 容器中。

8)新建 HelloMain 类,代码如下:

public class HelloMain{

public static void main(String[] args){

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(HelloConfig.class);

HelloService helloService = context.getBean(HelloService.class);

helloService.hello("66666");

context.close();

}

}

HelloMain 类中有一个 main() 方法,它负责将当前项目跑起来。

AnnotationConfigApplicationContext 是一个用来管理注解 Bean 的容器,可以将 @Configuration 注解的类 Class 作为参数获取容器对象。再通过 getBean() 方法获取注册的 Bean 对象。获取到 HelloService 对象后,就可以让它说一声“66666”了。

“二哥,这篇文章中的示例代码你上传到码云了吗?最近 GitHub 访问起来有点卡。”

“你到挺贴心啊,三妹。码云传送门~”

“二哥,你教得真不错,我完全学会了,一点也不枯燥。”

“那必须滴啊,期待下一篇吧?”

“那是当然啊,期待,非常期待,望眼欲穿的感觉。”

05、鸣谢

请允许我热情地吐槽一下,这篇文章我不希望再被喷了,看在我这么辛苦搞原创(创意+干货+有趣)的份上,多鼓励鼓励好不好?别瞅了,点赞呗,你最美你最帅

教你学java_教妹学Java:Spring 入门篇相关推荐

  1. Java爬虫入门篇---Jsoup工具

    Java爬虫入门篇---Jsoup工具 前言 准备工作 获取文本数据 获取页面中所有的图片 前言 pythoy的scrapy框架是大名鼎鼎,Jsoup则为Java框架的爬虫 准备工作 1.下载jsou ...

  2. JAVA中整型常量的长度,Java基础入门篇(三)——Java常量、变量,

    Java基础入门篇(三)--Java常量.变量, 一.Java常量 (一)什么是常量 常量指的是在程序中固定不变的值,是不能改变的数据.在Java中,常量包括整型常量.浮点型常量.布尔常量.字符常量等 ...

  3. 新手学java_新手如何学习Java

    新手如何学习Java Java作为一门高级编程语言在信息科技时代有着广泛的应用.新手如何学习Java呢?下面小编来给大家介绍Java的学习方法,希望对大家有帮助! 1理解Java思想 Java是一门面 ...

  4. javascript java html_JS入门篇(二):在html中如何使用Javascript

    原标题:JS入门篇(二):在html中如何使用Javascript (1)java的使用 HTML 中的脚本必须位于 <> 与 > 标签之间.脚本可被放置在 HTML 页面的 和 部 ...

  5. 穿越 java | 快速入门篇 - 第1节 计算机基础知识

    主题:计算机基础知识 开发环境 更多干货 定义 作用 组成元件 CPU 内存 cpu里的高速缓存 BIOS软件(基础输入输出系统) CMOS芯片 机械硬盘 组成 数据存取过程 文件编码 ASCII G ...

  6. 零基础学怎么学Java_零基础学java难么?怎么自学?

    在计算机发展迅速的今天,越来越多的人去学习编程,其中Java就是大家热衷的语言之一.这时候就有人问,零基础学java难么?下面小编将回答这一问题并给出学习路线. 小编想说,这个实际上要看个人能力以及前 ...

  7. 深入浅出学java_《深入浅出学JAVA开发初级》

    整体说明: Java私塾的这一套视频是完全真实课堂录制,实际上课时间为十一天,主要内容包括: 1:系统完整的学习Java的基础知识 2:深入剖析重点知识点的理论 3:超多的编程题目和程序讲解 4:最后 ...

  8. 用什么方式学java_五分钟学Java:打印Java数组最优雅的方式是什么?

    在逛 Stack Overflow 的时候,发现了一些访问量像‎安第斯山一样高的问题,比如说这个:打印 Java 数组最优雅的方式是什么?访问量足足有 220W+,想不到啊,这么简单的问题竟然有这么多 ...

  9. 先学c语言还是先学java_是先学 java好还是先学c语言好

    第三个原因就是它够复杂,这与前面优点互相矛盾了,但是事实却是如此最然C语言什么也做不了但是可以开发出很多的小工具,当这些小工具组合使用的时候就会编程一个比较大的产品,实际上面向对象也是一种概念,面向过 ...

最新文章

  1. Sharding-jdbc教程:Springboot整合sharding-jdbc实现读写分离
  2. 整数的幂计算(三种方法)最快O(logn)
  3. 【DICOMDIR专题】DICOMDIR基础知识及常见问题汇总
  4. 【转】VTK与Qt整合的示例
  5. SVN使用教程总结[转]
  6. 【路径规划】基于matlab改进的蚁群算法路径规划【含Matlab源码 335期】
  7. 精小的无线接收模块22MM直径硬币大小QI协议
  8. 写给美术看的Unity全局光照详解
  9. Origin Pro2022教育版官方申请、安装及汉化、续期
  10. Win7 安装.Net 4.7.2 失败
  11. 生成式对抗网络(GAN)简介
  12. 购物时,商品加入购物车的飞入效果
  13. 顺序表的建立和基本操作
  14. TP5.1导入Excel表格,支持自动筛选字段,支持验证字段
  15. win10系统还原被组策略关闭怎么解决
  16. moia调度mysql到hive_必看:数据平台的搭建教程及软件工具
  17. follow Sam哥 OS 课程的漫长之路
  18. 高德 获取城市地铁站点数据
  19. vue mysql 电商,Vue电商项目
  20. 【愚公系列】2022年11月 uniapp专题-优购电商-商品详情页面

热门文章

  1. 鸿蒙系统 智能手表,魅族官宣:你好,鸿蒙 首个第三方接入鸿蒙OS手机品牌新品亮相...
  2. Python爬虫进阶--js逆向-某天下与某某二手房密码加密分析
  3. Verilog的时序问题和SystemVerilog TestBench激励时序
  4. 2020.2.19作业单
  5. 【Redis笔记】缓存穿透与缓存击穿以及应对方法
  6. mac软件卸载不干净?你没用对工具!!试试这款mac卸载神器!
  7. 自制java虚拟机_《深入理解Android:Java虚拟机ART》 —1.2.3 准备模拟器和自制系统镜像...
  8. 亚马逊、Lazada、shopee、ebay、wish、tiktok、速卖通、乐天、煤炉、独立站、美客多、沃尔玛、阿里国际测评(补单)怎么盈利?怎么做?
  9. UE全景图,碰到the outpout directory时的问题
  10. WPF 不要给 Window 类设置变换矩阵(分析篇):System.InvalidOperationException: 转换不可逆。