关于Spring
noneplus 人气:4在SpringBoot火爆2019的年代,Spring框架也逐渐变成了底层。对于具体的应用,使用Spring开发的效率远远比不上使用SpringBoot,IOC与AOP的xml在SpringBoot中被取代,包依赖也被进一步被封装成各个模块。
简化开发的同时带来了更多的透明性,欲戴皇冠,必承其重。
Spring有两大特性:IOC和AOP。
关于IOC,
之前在CSDN写了一篇描述:https://blog.csdn.net/qq_40754146/articlehttps://img.qb5200.com/download-x/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)
加载全部内容