发表于: 2017-10-11 22:44:39
1 696
今天做的事情:
学习spring,之前用过框架来做过小项目,不过那只是简单使用并没有理解里面的配置,对于学习这个事情,还是要自己去潜心学,有时候也需要沟通一下,容易转牛角尖。
spring中有几块是很重要的,比如IOC和AOP还有DI,明白是控制反转,面向切面编程和依赖注入。
在知乎看到的知识点,要了解控制反转,先来了解一个思想是:依赖倒置原则。
假设设计一辆车,先设计轮子,根据车轮大小设计底盘,再根据底盘设计车身,最后整个汽车轮廓就出来了。这里出现一个依赖关系,
汽车依赖车身,车身依赖底盘,底盘依赖轮子,如果要增加轮子的形状大小,那一系列的东西都得改动,工程很大。
现在换一个思路,我们先设计汽车的大致,根据汽车设计车身,车身有了底盘就可以设计,最后是轮子大小,这样一来,关系就倒过来了,轮子一来底盘。底盘依赖车身,车身依赖汽车了。如果要改动,只需要改汽车的设计就可以了。这就是依赖倒置原则,把原本的高层建筑依赖底层建筑倒置,让底层建筑依赖高层建筑,这样不会出现牵一发而动全身了。
控制反转 就是依赖倒置原则的一种代码设计的思路,方法就是依赖注入。
为了理解这几个概念,还是用上面的汽车举例,换成代码,结构如下:
由此我们可以看到,仅仅是为了修改轮胎的构造函数,这种设计却需要修改整个上层所有类的构造函数!在软件工程中,这样的设计几乎是不可维护的——在实际工程项目中,有的类可能会是几千个类的底层,如果每次修改这个类,我们都要修改所有以它作为依赖的类,那软件的维护成本就太高了。
所以我们需要进行控制反转(IoC),及上层控制下层,而不是下层控制着上层。我们用依赖注入(Dependency Injection)这种方式来实现控制反转。所谓依赖注入,就是把底层类作为参数传入上层类,实现上层类对下层类的“控制”。这里我们用构造方法传递的依赖注入方式重新写车类的定义:
这里只需要修改轮胎类就行,别的不需要修改,更容易去维护。
AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要意图就要将日志记录,性能统计,安全控制等等代码从核心代码中清楚的划分出来.
AOP代理可以通过jdk动态代理实现,也可以通过cglib实现,默认是通过jdk动态代理实现的。jdk动态代理需要接口的支持,如果没有接口只有类,则使用cglib来实现.
遇到的问题:
迷
收获:
没有多少,今天很水。
评论