spring大观园
1.什么是spring?
spring:是以interface21为基础,并不断的丰富其内涵的,由Rod Johnson创建的一个轻量级框架。(顺便提一句,这位大佬是悉尼大学的博士,然而他的专业不是计算机相关的,而是音乐学!!! )
其根本使命是:解决企业级应用开发的的复杂性。
核心特征:IOC(控制反转)、AOP(面向切面)。
2.spring框架组成
3.spring的优势?
简化开发、实现解耦
AOP编程
支持声明式事务处理
方便程序测试
可以集成多种框架
spring IOC
1.什么是IOC?
IOC:全称 Inversion of Control,也叫“控制反转”,它还有一个别名“依赖注入(Dependency Injection)”.是一个轻量级的容器。
IOC的理念:简单点说,就是让别人为你服务!!!
IOC最权威的解释和总结,应该是Martin Fowler的那篇文章“Inversion of Control Containers and the Dependency Injection Pattern”翻译过来是:控制反转容器和依赖注入容器。
我个人对IOC理解:IOC 控制反转就是一种思想,有点像中介的感觉,就比如我们去买房,如果是自己去呢我们是不是要一个一个的去找,这样是不是很浪费我们的时间,但是你通过中介,你把要需要买的房的预期告诉他,就比如大小、地址、价格、装修等等。中介是不是就会去找合适的房子来供你参考啊!这样一来我们是不是大大缩短了时间成本。再深一点理解,中介就好比“IOC容器”,我们买房子的就是“被注入对象”,房子就是“被依赖的对象”,而房子的大小、价格、地段就是“依赖对象的参数”。IOC就是把传统上程序代码直接控制对象的调用权交给容器,通过容器来实现对对象的组件的管理和装配。
2.依赖注入的三种方式?
2.1构造方法注入
构造方法注入:顾名思义,就是被注入的对象通过构造方法中声明被依赖对象的参数列表,让IOC容器知道它需要哪些依赖的对象。
例如:
public FXNewProvider(IFNewsListener newsListener,IFXNewspersister newsPersister){
this.newsListener = newsListener;
this.newsPersiter = newsPersister;
}
IOC Service Provider会检查被注入对象的构造方法,取得它需要的依赖对象列表,进而为其注入相应的对象,注意:同一个对象不可能同时被构造两次!!!
2.2setter方法注入
对于javaBean对象来说,通常会通过setxxx()和getxxx()来访问对应属性。这些setxxx()统称为setter方法。
public class Component{
priavte Dog dog;
public Dog setDog(Dog dog){
this.dog = dog;
}
public doSomething(){
dog.speek();
}
}
2.3接口注入
这个比起前两个稍微有点难。被注入的对象如果想要IOC Service Provider为其注入对象,就必须实现某个接口。而这个接口提供一个方法,用来为其注入依赖对象。IOC Service Provider最终通过这些接口了解被注入对象需要注入什么依赖对象。
public interface InjectTion{//通用注入接口
void injectA(Object obj); //其中obj的值通过容器设置
}
public class Component implements interface{
priavte Dog dog;
public void inject(Dog dog){//实现注入方法
this.dog = dog;
}
public doSomething(){
dog.speek();
}
}
2.4三种注入方式的比较
接口注入不提倡,退役状态。它强制注入对象实现不必要的接口,带有侵入性。
构造方法注入
优点:对象在构造完成后,已进入就绪状态,可以马上使用。
缺点:(i)依赖对象多的时候,构造方法的参数列表较长。
(ii)通过反射构造对象时,对相同类型的参数处理会比较困难,维护和使用比较麻烦。
(iii)在java中,构造方法无法继承,无法设置默认值。
setter方法注入
优点:(i)在描述性比构造方法注入要好一点。
(ii)setter方法可以被继承,允许设置默认值。
(iii)具有良好的IDE支持。
缺点:对象无法在构造完成后,马上进入就绪状态。