Spring和Springboot有哪些核心概念和最佳实践?

摘要:本文主要整理一些Spring & SpringBoot应用时和相关原理的知识点,对于源码不做没有深入的讲解。
简介 本文主要整理一些Spring & SpringBoot应用时和相关原理的知识点,对于源码不做深入的讲解。 1. 思维导图 右键新窗口打开可以放大。 说明 使用@Configuration在java代码中声明一个bean——而不是使用xml——来做配置,实际上很早就有了(至少在《Spring实战(第3版)》出版时,也就是Spring3.0时),我一直以为这是SpringBoot的新特性。 2. Spring 2.1 AOP术语 通知Advice —— 切面要做什么,何时执行。何时,包括方法调用前、方法调用后、方法成功调用后、方法调用抛异常后、环绕(Around)。环绕允许提供一些需要跨越方法调用前后的功能,如计算调用耗时。 连接点Joinpoint —— 应用执行时能插入切面的点。实际上是一个逻辑概念,不体现在配置中。 切点Pointcut —— 执行通知的具体的连接点。 切面Aspect —— 通知+切点 引入Introduction —— 允许为类添加新的方法或属性。(个人理解即应用使用切面中的方法和属性,就好像这些方法和属性是原生的一样。可以参考<aop:declare-parents>元素) 织入Weaving —— 将切面应用到目标对象创建新的代理对象的过程,Spring使用的是运行时。编译期和类加载时是其他的方式。 2.2 Bean的生命周期 虽然被称为生命周期,实际上指的是bean在初始化、回收期间调用了哪些方法。如果只看《Spring实战》,可以看到类似下面的图(图源:参考文献[3]) 具体哪一步做了什么?其实这些方法都是可选的,自定义的bean可以实现,也可以不实现,实现里写什么似乎都没问题,参考文献[3]中的测试代码展示了这些方法在bean生命周期中的执行顺序。 但是对于Spring框架的bean,就有必要的用途了。这里没有深入研究,有兴趣可以自行读源码。 2.3 Cglib和JdkProxy 2.3.1 与Spring的关系 这是Spring AOP的两种实现方式。根据官方文档: 默认使用JdkProxy 对于被代理对象没有实现任何接口,使用Cglib 可以强制指定使用Cglib。 这样就可以解释为什么有的bean实现了接口,有的没有,但是在同一个工程中可以并存了。 2.3.2 示例代码 本节代码改写自参考文献[5]。
阅读全文