关于Spring

2020-01-22 09:49:18 浏览数 (1)

在SpringBoot火爆2019的年代,Spring框架也逐渐变成了底层。对于具体的应用,使用Spring开发的效率远远比不上使用SpringBoot,IOC与AOP的xml在SpringBoot中被取代,包依赖也被进一步被封装成各个模块。 简化开发的同时带来了更多的透明性,欲戴皇冠,必承其重。

Spring有两大特性:IOC和AOP。

关于IOC,

之前在CSDN写了一篇描述:https://blog.csdn.net/qq_40754146/article/details/90815333

在Spring的时代,就推荐使用注解而不是xml来配置,在SpringBoot中完全实现了注解的全面占领。

IOC有什么用?

IOC容器的背景是构建大型应用时会用到很多类,而完成对类与类之间的各种依赖关系管理成为了一个问题,于是IOC容器出现了。

IOC容器的作用就是管理类之间复杂的依赖关系。

用专业的名词解释,就是降低类之间的耦合度,方便后期开发和维护。

降低耦合本质上是将类与类之间的耦合转为类和IOC容器之间的耦合,PS:耦合不能完全消除,只能减小。

关于AOP

AOP中文名叫面向切面编程。

AOP使用动态代理实现。包括两种方式:

  • 使用JDK动态代理实现。
  • 使用cglib来实现

关于动态代理:

  • 静态代理:自己编写创建代理类,然后再进行编译,在程序运行前,代理类的.class文件就已经存在了。
  • 动态代理:在实现阶段不用关心代理谁,而在运行阶段(通过反射机制)才指定代理哪一个对象。

关于反射:反射机制允许程序在运行期 借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 (最高权限)

AOP的实现本质是反射加上代理模式。

面向切面的思想本质上就是通过动态代理(反射)实现各个类的代码控制。

依然是很抽象的一句话。。。。。

【举个栗子】

现在有5个类,每个类有5个方法,如果我想要在每个方法执行完成之后打印方法名,按照没有aop的思想就是在每个方法后面加上logger.info或者system.out.println。

一共就需要些25行代码,这个时候,aop登场。建立一个切面类,然后定位到这5个类的每个方法,加一个后置通知(就是方法执行完之后会执行这个通知,本质上是一个方法)。

这样25行的代码简化成了一个方法加方法体的一行代码,如果说IOC是解决类与类之间的依赖关系(有点无形),那么AOP是看得见可以简化大量代码。

AOP的应用场景有日志记录,性能统计,安全控制,事务处理,异常处理等。目前用过的就是日志处理(hhh)

0 人点赞