1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00
2019-05-26 14:55:37 +08:00

84 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Spring相关教程/资料
### 官网相关
- [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 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/)
- **黑马视频和尚硅谷视频(非常推荐):** 微信公众号:“**JavaGuide**”后台回复关键字 “**1**” 免费领取。
## 面试必备知识点
### 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-下篇/)
### 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种类型的通知BeforeAfterAfter-returningAfter-throwingAroundSpring中对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的原理
### 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编程式和声明式事务实例讲解](https://juejin.im/post/5b010f27518825426539ba38)
### Spring单例与线程安全
- [Spring框架中的单例模式源码解读](http://www.cnblogs.com/chengxuyuanzhilu/p/6404991.html):单例模式是一种常用的软件设计模式。通过单例模式可以保证系统中一个类只有一个实例。spring依赖注入时使用了 多重判断加锁 的单例模式。
### Spring源码阅读
阅读源码不仅可以加深我们对Spring设计思想的理解提高自己的编码水品还可以让自己在面试中如鱼得水。下面的是Github上的一个开源的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)
- [spring-task](https://github.com/seaswalker/Spring/blob/master/note/spring-task.md)
- [spring-transaction](https://github.com/seaswalker/Spring/blob/master/note/spring-transaction.md)
- [spring-mvc](https://github.com/seaswalker/Spring/blob/master/note/spring-mvc.md)
- [guava-cache](https://github.com/seaswalker/Spring/blob/master/note/guava-cache.md)