Spring框架学习
最后,我还是变成了我最讨厌的人。。
Spring是java的一个框架,轻量级+非侵入性,前者指的是它很小,后者指的是业务代码对该框架没有强依赖,不需要靠继承框架提供的类或接口来做事
Spring的两个特点:
1 IoC 控制反转 a类依赖于b类,这样强耦合不好,Spring创造出b的资源并且给a用,降低耦合 ( 但是这样a其实还是要importb,不知道为什么耦合就低了。。)此时b这个对象的所有者是Spring,它的销毁和创建都是框架负责。(IoC又分两个流派,一者开场创建所有对象,一者lazy)
这里的耦合和import没有太大的关系,如果a new了一个b出来,则相当于b的生命周期由a控制,而IoC是把b的生命周期交给框架,相当于左旋了一下,a每次注入一个b,只是使用b做了事情
Spring造出来的b,默认是单例的,即a和c自动注入的是同一个b,如果b有状态则会出问题,可以主动找框架要一个b出来,框架就会给你new一个出来
2 AOP 面向切面编程 类似于unittest、log这种,对一个函数,在start和end或一些特定的时机都要做很固定的事情,例如打log和cleanEnv,频繁的做一件事情很浪费,这里log和cleanEnv被称为切面,Spring提供了一种方式,使得我们可以先对log这一切面进行编程,然后为func声明这一切面,这样可以达到代码复用(golang自带的说?)
@Autowired - java中的一个标签,表示自动注入,如果a要利用IoC调用b,那么就得在xml文件里进行提前声明,这样才能使得a找到b。这可能会造成一个很大的xml。a在类中声明b时,只需要加上这个,编译器就会自己去找b在哪儿。