Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
JavaGuide
提交
1f719701
J
JavaGuide
项目概览
wushizhenking
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1f719701
编写于
5月 04, 2019
作者:
S
SnailClimb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update Spring学习与面试.md
上级
e84f4d1d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
37 addition
and
82 deletion
+37
-82
docs/system-design/framework/Spring学习与面试.md
docs/system-design/framework/Spring学习与面试.md
+37
-82
未找到文件。
docs/system-design/framework/Spring学习与面试.md
浏览文件 @
1f719701
#
Spring相关教程/资料:
#
# Spring相关教程/资料
>
## 官网相关
#
## 官网相关
[
Spring官网
](
https://spring.io/
)
-
[
Spring官网
](
https://spring.io/
)
-
[
Spring系列主要项目
](
https://spring.io/projects
)
-
[
Spring官网指南
](
https://spring.io/guides
)
-
[
Spring Framework 4.3.17.RELEASE API
](
https://docs.spring.io/spring/docs/4.3.17.RELEASE/javadoc-api/
)
[
Spring系列主要项目
](
https://spring.io/projects
)
## 系统学习教程
从配置到安全性,Web应用到大数据 - 无论您的应用程序的基础架构需求如何,都有一个Spring Project来帮助您构建它。 从小处着手,根据需要使用 - Spring是通过设计模块化的。
### 文档
[
Spring官网指南
](
https://spring.io/guides
)
-
[
极客学院Spring Wiki
](
http://wiki.jikexueyuan.com/project/spring/transaction-management.html
)
-
[
Spring W3Cschool教程
](
https://www.w3cschool.cn/wkspring/f6pk1ic8.html
)
无论您在构建什么,这些指南都旨在尽可能快地提高您的工作效率 - 使用Spring团队推荐的最新Spring项目发布和技术。
### 视频
[
Spring官方文档翻译(1~6章)
](
https://blog.csdn.net/tangtong1/article/details/51326887
)
-
[
网易云课堂——58集精通java教程Spring框架开发
](
http://study.163.com/course/courseMain.htm?courseId=1004475015#/courseDetail?tab=1&35
)
-
[
慕课网相关视频
](
https://www.imooc.com/
)
> ## 系统学习教程:
-
**黑马视频和尚硅谷视频(非常推荐):**
微信公众号:“
**JavaGuie**
”后台回复关键字 “
**1**
” 免费领取。
### 文档:
[
极客学院Spring Wiki
](
http://wiki.jikexueyuan.com/project/spring/transaction-management.html
)
## 面试必备知识点
[
Spring W3Cschool教程
](
https://www.w3cschool.cn/wkspring/f6pk1ic8.html
)
### 视频:
[
网易云课堂——58集精通java教程Spring框架开发
](
http://study.163.com/course/courseMain.htm?courseId=1004475015#/courseDetail?tab=1&35
)
[
慕课网相关视频
](
https://www.imooc.com/
)
**黑马视频(非常推荐):**
微信公众号:“
**Java面试通关手册**
”后台回复“
**资源分享第一波**
”免费领取。
> ## 一些常用的东西
[
Spring Framework 4.3.17.RELEASE API
](
https://docs.spring.io/spring/docs/4.3.17.RELEASE/javadoc-api/
)
默认浏览器打开,当需要查某个类的作用的时候,可以在浏览器通过ctrl+f搜索。
# 面试必备知识点
> ## SpringAOP,IOC实现原理
### SpringAOP,IOC实现原理
AOP实现原理、动态代理和静态代理、Spring IOC的初始化过程、IOC原理、自己实现怎么实现一个IOC容器?这些东西都是经常会被问到的。
[
自己动手实现的 Spring IOC 和 AOP - 上篇
](
http://www.coolblog.xyz/2018/01/18/自己动手实现的-Spring-IOC-和-AOP-上篇/
)
推荐阅读:
-
[
自己动手实现的 Spring IOC 和 AOP - 上篇
](
http://www.coolblog.xyz/2018/01/18/自己动手实现的-Spring-IOC-和-AOP-上篇/
)
[
自己动手实现的 Spring IOC 和 AOP - 下篇
](
http://www.coolblog.xyz/2018/01/18/自己动手实现的-Spring-IOC-和-AOP-下篇/
)
-
[
自己动手实现的 Spring IOC 和 AOP - 下篇
](
http://www.coolblog.xyz/2018/01/18/自己动手实现的-Spring-IOC-和-AOP-下篇/
)
### AOP
:
### AOP
AOP思想的实现一般都是基于
**代理模式**
,在JAVA中一般采用JDK动态代理模式,但是我们都知道,
**JDK动态代理模式只能代理接口而不能代理类**
。因此,Spring AOP 会这样子来进行切换,因为Spring AOP 同时支持 CGLIB、ASPECTJ、JDK动态代理。
-
如果目标对象的实现类实现了接口,Spring AOP 将会采用 JDK 动态代理来生成 AOP 代理类;
-
如果目标对象的实现类没有实现接口,Spring AOP 将会采用 CGLIB 来生成 AOP 代理类——不过这个选择过程对开发者完全透明、开发者也无需关心。
推荐阅读:
-
[
静态代理、JDK动态代理、CGLIB动态代理讲解
](
http://www.cnblogs.com/puyangsky/p/6218925.html
)
:我们知道AOP思想的实现一般都是基于
**代理模式**
,所以在看下面的文章之前建议先了解一下静态代理以及JDK动态代理、CGLIB动态代理的实现方式。
-
[
Spring AOP 入门
](
https://juejin.im/post/5aa7818af265da23844040c6
)
:带你入门的一篇文章。这篇文章主要介绍了AOP中的基本概念:5种类型的通知(Before,After,After-returning,After-throwing,Around);Spring中对AOP的支持:AOP思想的实现一般都是基于代理模式,在Java中一般采用JDK动态代理模式,Spring AOP 同时支持 CGLIB、ASPECTJ、JDK动态代理,
-
[
Spring AOP 基于AspectJ注解如何实现AOP
](
https://juejin.im/post/5a55af9e518825734d14813f
)
:
**AspectJ是一个AOP框架,它能够对java代码进行AOP编译(一般在编译期进行),让java代码具有AspectJ的AOP功能(当然需要特殊的编译器)**
,可以这样说AspectJ是目前实现AOP框架中最成熟,功能最丰富的语言,更幸运的是,AspectJ与java程序完全兼容,几乎是无缝关联,因此对于有java编程基础的工程师,上手和使用都非常容易。Spring注意到AspectJ在AOP的实现方式上依赖于特殊编译器(ajc编译器),因此Spring很机智回避了这点,转向采用动态代理技术的实现原理来构建Spring AOP的内部机制(动态织入),这是与AspectJ(静态织入)最根本的区别。
**Spring 只是使用了与 AspectJ 5 一样的注解,但仍然没有使用 AspectJ 的编译器,底层依是动态代理技术的实现,因此并不依赖于 AspectJ 的编译器**
。 Spring AOP虽然是使用了那一套注解,其实实现AOP的底层是使用了动态代理(JDK或者CGLib)来动态植入。至于AspectJ的静态植入,不是本文重点,所以只提一提。
-
[
探秘Spring AOP(慕课网视频,很不错)
](
https://www.imooc.com/learn/869
)
:慕课网视频,讲解的很不错,详细且深入
-
[
spring源码剖析(六)AOP实现原理剖析
](
https://blog.csdn.net/fighterandknight/article/details/51209822
)
:通过源码分析Spring AOP的原理
[
※静态代理、JDK动态代理、CGLIB动态代理讲解
](
http://www.cnblogs.com/puyangsky/p/6218925.html
)
我们知道AOP思想的实现一般都是基于
**代理模式**
,所以在看下面的文章之前建议先了解一下静态代理以及JDK动态代理、CGLIB动态代理的实现方式。
[
Spring AOP 入门
](
https://juejin.im/post/5aa7818af265da23844040c6
)
带你入门的一篇文章。这篇文章主要介绍了AOP中的基本概念:5种类型的通知(Before,After,After-returning,After-throwing,Around);Spring中对AOP的支持:AOP思想的实现一般都是基于代理模式,在JAVA中一般采用JDK动态代理模式,Spring AOP 同时支持 CGLIB、ASPECTJ、JDK动态代理,
[
※Spring AOP 基于AspectJ注解如何实现AOP
](
https://juejin.im/post/5a55af9e518825734d14813f
)
**AspectJ是一个AOP框架,它能够对java代码进行AOP编译(一般在编译期进行),让java代码具有AspectJ的AOP功能(当然需要特殊的编译器)**
,可以这样说AspectJ是目前实现AOP框架中最成熟,功能最丰富的语言,更幸运的是,AspectJ与java程序完全兼容,几乎是无缝关联,因此对于有java编程基础的工程师,上手和使用都非常容易
Spring注意到AspectJ在AOP的实现方式上依赖于特殊编译器(ajc编译器),因此Spring很机智回避了这点,转向采用动态代理技术的实现原理来构建Spring AOP的内部机制(动态织入),这是与AspectJ(静态织入)最根本的区别。
[
※探秘Spring AOP(慕课网视频,很不错)
](
https://www.imooc.com/learn/869
)
慕课网视频,讲解的很不错,详细且深入
[
spring源码剖析(六)AOP实现原理剖析
](
https://blog.csdn.net/fighterandknight/article/details/51209822
)
通过源码分析Spring AOP的原理
### IOC:
### IOC
Spring IOC的初始化过程:
![
Spring IOC的初始化过程
](
https://user-gold-cdn.xitu.io/2018/5/22/16387903ee72c831?w=709&h=56&f=png&s=4673
)
[
[Spring框架]Spring IOC的原理及详解。
](
https://www.cnblogs.com/wang-meng/p/5597490.html
)
[
Spring IOC核心源码学习
](
https://yikun.github.io/2015/05/29/Spring-IOC核心源码学习/
)
比较简短,推荐阅读。
[
Spring IOC 容器源码分析
](
https://javadoop.com/post/spring-ioc
)
强烈推荐,内容详尽,而且便于阅读。
> ## Spring事务管理
[
可能是最漂亮的Spring事务管理详解
](
https://juejin.im/post/5b00c52ef265da0b95276091
)
-
[
[Spring框架]Spring IOC的原理及详解。
](
https://www.cnblogs.com/wang-meng/p/5597490.html
)
[
Spring编程式和声明式事务实例讲解
](
https://juejin.im/post/5b010f27518825426539ba38
)
-
[
Spring IOC核心源码学习
](
https://yikun.github.io/2015/05/29/Spring-IOC核心源码学习/
)
:比较简短,推荐阅读。
-
[
Spring IOC 容器源码分析
](
https://javadoop.com/post/spring-ioc
)
:强烈推荐,内容详尽,而且便于阅读。
> ## 其他
## Spring事务管理
**Spring单例与线程安全:**
-
[
可能是最漂亮的Spring事务管理详解
](
https://juejin.im/post/5b00c52ef265da0b95276091
)
-
[
Spring编程式和声明式事务实例讲解
](
https://juejin.im/post/5b010f27518825426539ba38
)
[
Spring框架中的单例模式(源码解读)
](
http://www.cnblogs.com/chengxuyuanzhilu/p/6404991.html
)
### Spring单例与线程安全
单例模式是一种常用的软件设计模式。通过单例模式可以保证系统中一个类只有一个实例。spring依赖注入时,使用了 多重判断加锁 的单例模式。
-
[
Spring框架中的单例模式(源码解读)
](
http://www.cnblogs.com/chengxuyuanzhilu/p/6404991.html
)
:
单例模式是一种常用的软件设计模式。通过单例模式可以保证系统中一个类只有一个实例。spring依赖注入时,使用了 多重判断加锁 的单例模式。
>
## Spring源码阅读
#
## Spring源码阅读
阅读源码不仅可以加深我们对Spring设计思想的理解,提高自己的编码水品,还可以让自己在面试中如鱼得水。下面的是Github上的一个开源的Spring源码阅读,大家有时间可以看一下,当然你如果有时间也可以自己慢慢研究源码。
### [Spring源码阅读](https://github.com/seaswalker/Spring)
-
[
spring-core
](
https://github.com/seaswalker/Spring/blob/master/note/Spring.md
)
-
[
spring-aop
](
https://github.com/seaswalker/Spring/blob/master/note/spring-aop.md
)
-
[
spring-context
](
https://github.com/seaswalker/Spring/blob/master/note/spring-context.md
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录