diff --git "a/\344\270\273\346\265\201\346\241\206\346\236\266/Spring\345\255\246\344\271\240\344\270\216\351\235\242\350\257\225.md" "b/\344\270\273\346\265\201\346\241\206\346\236\266/Spring\345\255\246\344\271\240\344\270\216\351\235\242\350\257\225.md" index 2980f1cf03a458a3f99a608ad595bcb2dda99555..a897797cf6bef46594b50b1f3b3c2d9e8f3aff27 100644 --- "a/\344\270\273\346\265\201\346\241\206\346\236\266/Spring\345\255\246\344\271\240\344\270\216\351\235\242\350\257\225.md" +++ "b/\344\270\273\346\265\201\346\241\206\346\236\266/Spring\345\255\246\344\271\240\344\270\216\351\235\242\350\257\225.md" @@ -2,7 +2,7 @@ # Spring相关教程/资料: -> ### 官网相关 +> ## 官网相关 [Spring官网](https://spring.io/) @@ -16,7 +16,7 @@ [Spring官方文档翻译(1~6章)](https://blog.csdn.net/tangtong1/article/details/51326887) -> ### 系统学习教程: +> ## 系统学习教程: ### 文档: @@ -33,7 +33,7 @@ **黑马视频(非常推荐):** 微信公众号:“**Java面试通关手册**”后台回复“**资源分享第一波**”免费领取。 -> ### 一些常用的东西 +> ## 一些常用的东西 [Spring Framework 4.3.17.RELEASE API](https://docs.spring.io/spring/docs/4.3.17.RELEASE/javadoc-api/) @@ -42,13 +42,13 @@ # 面试必备知识点 -> ### Spring事务管理 +> ## Spring事务管理 [可能是最漂亮的Spring事务管理详解](https://juejin.im/post/5b00c52ef265da0b95276091) [Spring编程式和声明式事务实例讲解](https://juejin.im/post/5b010f27518825426539ba38) -> ### SpringAOP,IOC实现原理 +> ## SpringAOP,IOC实现原理 AOP实现原理、动态代理和静态代理、Spring IOC的初始化过程、IOC原理、自己实现怎么实现一个IOC容器?这些东西都是经常会被问到的。 @@ -56,9 +56,20 @@ AOP实现原理、动态代理和静态代理、Spring IOC的初始化过程、I [自己动手实现的 Spring IOC 和 AOP - 下篇](http://www.coolblog.xyz/2018/01/18/自己动手实现的-Spring-IOC-和-AOP-下篇/) -**AOP:** +### AOP: -[一起来谈谈 Spring AOP!](https://juejin.im/post/5aa7818af265da23844040c6) +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动态代理, @@ -66,19 +77,16 @@ AOP实现原理、动态代理和静态代理、Spring IOC的初始化过程、I 主要介绍了@AspectJ 详解以及Spring AOP - AspectJ注解(讲的挺不错的) -[探秘Spring AOP](https://www.imooc.com/learn/869) +[探秘Spring AOP(慕课网视频,很不错)](https://www.imooc.com/learn/869) 慕课网视频,讲解的很不错,详细且深入 -[Spring AOP实现原理](http://www.cnblogs.com/puyangsky/p/6218925.html) - -通过代码演示了静态代理以及JDK动态代理、CGLIB动态代理的实现方式,很不错。 [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) @@ -93,7 +101,7 @@ Spring IOC的初始化过程: 强烈推荐,内容详尽,而且便于阅读。 -> ### 其他 +> ## 其他 **Spring单例与线程安全:** @@ -101,7 +109,7 @@ Spring IOC的初始化过程: 单例模式是一种常用的软件设计模式。通过单例模式可以保证系统中一个类只有一个实例。spring依赖注入时,使用了 多重判断加锁 的单例模式。 -> ### Spring源码阅读 +> ## Spring源码阅读 阅读源码不仅可以加深我们对Spring设计思想的理解,提高自己的编码水品,还可以让自己字面试中如鱼得水。下面的是Github上的一个开源的Spring源码阅读,大家有时间可以看一下,当然你如果有时间也可以自己慢慢研究源码。