百度一哈Spring入门,最常见的两个概念就是IOC(控制反转)和依赖注入(DI)。看了两天资料,简单说下自己的理解。首先整体的大思想是解耦,具体一点是类本身与数据(依赖)的解耦,以及整体流程的分层。
IOC 与 DI
所谓IOC,即是指将类和数据等解耦,把类的一切控制权交给容器。所谓容器,是控制管理类或者bean的地方。容器来为类分配数据,控制类的行为。
在最常见的helloworld例子里,为了输出helloworld,我们先实现了一个类,这个类本身的作用是用来输出一个message。然后这个message,也就是helloword这个字符串,被存放在了xml的配置文件中。
就是数据和逻辑的分离。
而把helloworld传递给message赋值,就叫做依赖注入。之所以依赖注入要单独拿出来。是因为一个类的初始化赋值有很多方式。毕竟配置文件写大了,容易乱。一个bean可能被用在好几个地方,一个类的初始化也要注入好多bean。
Spring的依赖注入和切面,其实和python的装饰器很像
而且写法上都是@
def inject_message(cls, message):
cls.message = message
@inject_message('hello')
class Printer(object):
message = ''
def print_message(self):
print self.message
是不是一样的感觉?
只不过bean里面,所有的数据都是注入的,所以管理起来更麻烦一些,也不会像这个装饰器这样这么优雅。
至于切面,就更是装饰器了。
AOP
所谓的before,after就是@before(func),只不过我们一般装饰器写的不会这么通用罢了,而且装饰器本来就是before after都包括了。当然拆分的更细的话,更通用的话,最后应该是就是这个样子吧。
这是从思想上,spring给我的感觉。