【JAVAEE框架】浅谈 Spring 框架的两大核心思想

举报
追zhui 发表于 2025/11/13 20:42:43 2025/11/13
【摘要】 >  哈喽~大家好呀,>>  >>  >>  🥇个人主页:[个人主页](https://blog.csdn.net/aasd23?spm=1000.2115.3001.5343)       >>  🥈 系列专栏:[【云原生系列】](https://blog.csdn.net/aasd23/category_11852592.html?spm=1001.2014.3001.5482)>>...

>  哈喽~大家好呀,
>
>  
>
>  
>
>  🥇个人主页:[个人主页](https://blog.csdn.net/aasd23?spm=1000.2115.3001.5343)       
>
>  🥈 系列专栏:[【云原生系列】](https://blog.csdn.net/aasd23/category_11852592.html?spm=1001.2014.3001.5482)
>
>  🥉与这篇相关的文章:      
>
>  
>
>  |      |      |
>  | ---- | ---- |
>  |      |      |
>  |      |      |

Spring框架的两大核心特征:AOP 和 IoC

什么是 IoC ?

IoC 与 DI

(1) IoC就是控制反转,是指创建对象的控制权的转移。以前创建对象的主动权和时机是由自己把控的,而现在这种权力转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系。对象与对象之间松散耦合,也利于功能的复用。DI依赖注入, 和控制反转是同一个概念的不同角度的描述,即应用程序在运行时依赖loC容器来动态注入对象需要的外部资源。

(2) 最直观的表达就是,IoC让对象的创建不用去new了,可以由spring自动生产,使用java的反射机制,根据配置文件在运行时动态的去创建对象以及管理对象,并调用对象的方法的。、
 (3) Spring的I0C有三种注入方式:构造器注入、setter方法注入、 根据注解注入。
 loC让相互协作的组件保持松散的耦合,而AOP编程允许你把遍布于应用各层的功能分离出来形成可重用的功能组件

什么意思?

没有Spring的时候,以前我们怎么写应用?先 new 一个对象,然后再 get 与 set 使用,有了 Spring 之后,Spring 帮我们 new 一个对象,然后我们自己使用 get 与 set 方法调用。这就是控制反转。

什么又是 DI 呢?

创建好了对象之后,我们进行赋值,然后对数据干啥干啥,DI 就是在容器里面查找值,查找是否有依赖的对象,有就注入,过程也是不需要用户来完成的,容器帮我们完成整个属性注入的过程,就是 DI。

 什么是 AOP ?

AOP(面向接口编程),同样的,他也是一种思想,而不是技术。和 OOP(面向对象编程)相比较,AOP是对 OOP 的补充。OOP 是静态的抽象,而 AOP 是动态的抽象。关于 AOP 的概念,简单来说就是将一个工程中与源代码无关,但是很多地方都要用,抽出来也不影响源代码上下文的那一部分代码抽出来,然后要用的时候就织入进去,进行使用,至于是在指定的代码之前使用还是之后又或者异常使用等,可以动态的进行。就好比你要结婚,婚礼的整个流程你可以自己负责,但是会耗费你的时间精力,这时候,你也可以选择将婚礼交给婚庆公司,你不再需要负责婚礼的具体筹备过程,只需要在婚礼当天使用婚庆公司给你的成果。所以说 AOP 是基于代理模式下进行的。

什么是代理模式?

[可以看看这位佬写的](http://t.csdn.cn/u6fPt)

AOP 术语

1.通知(Advice)
  就是你想要的功能,也就是上面说的 安全,事物,日志等。你给先定义好把,然后在想用的地方用一下。

2.连接点(JoinPoint)
  这个更好解释了,就是spring允许你使用通知的地方,那可真就多了,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring只支持方法连接点.其他如aspectJ还可以让你在构造器或属性注入时都行,不过那不是咱关注的,只要记住,和方法有关的前前后后(抛出异常),都是连接点。

3.切入点(Pointcut)
  上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有几十个连接点了对把,但是你并不想在所有方法附近都使用通知(使用叫织入,以后再说),你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。

4.切面(Aspect)
  切面是通知和切入点的结合。现在发现了吧,没连接点什么事情,连接点就是为了让你好理解切点,搞出来的,明白这个概念就行了。通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。


 5.目标(target)
  引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。

6.代理(proxy)
  怎么实现整套aop机制的,都是通过代理,这个一会给细说。

7.织入(weaving)
  把切面应用到目标对象来创建新的代理对象的过程。有3种方式,spring采用的是运行时,为什么是运行时,后面解释。

关键就是:切点定义了哪些连接点会得到通知









> **不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!**
>

>
> ![img](https://img-blog.csdnimg.cn/02bed6ae9d27419b804c4605db6cee66.gif)![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)编辑

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。