spring是目前使用最广泛,大家都知道的一个框架。从2003年开始到目前(2016年)已存在了13年,目前最新版本是4。
对我来说spring是使用最久的一个技术,有空的时候拿出来复习一下,温故而知新,也是很值得的。
spring创始人是Rod Johnson。于2003年兴起。简单说,Spring是一个分层的Java SE/EEFull-stack (一站式)轻量级开源框架。
spring是分层架构的,分层架构允许使用者选择使用哪一个组件。同时为为J2EE应用程序的开发提供框架。
spring使用基本的JavaBean完成以前只能由EJB完成的事情。
spring的核心是控制反转(IoC)和面向切面变成(AOP),简单讲,spring是一个分层的JavaSE / EEfull-stack(一站式)的轻量级开源框架(重量级如EJB)。
IoC(inversion of control)控制反转
让对象的创建不再使用new,对象的生命周期,和对象之间的关系的控制权由原来的业务对象手中转交给了容器。
DI(Dependency Injection)依赖注入
Ioc的一个重要特性是在系统运行时,动态的向某个对象提供它所需要的其它对象,这一点是通过DI实现的。
比如:A需要操作数据库,需要一个Connection对象。以前需要在A中编程获得一个Connection。有了Spring,只要告诉Spring A需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行中,Spring会在适当的时候创建一个Connection对象,然后像打针一样,注射给A。Spring可以通过JDK的反射实现DI。
AOP(Aspect-Oriented Programing)面向切面编程
使业务逻辑各个部分进行分离,耦合度降低,提高程序可重用性,提高开发效率。
AOP是Gof设计模式的延伸,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性。Aop也是这种目标的一种实现。
AOP的代理的实现方式:JDK动态代理,CGLib字节码生成。
面向对象编程是将需求功能封装成相对独立且有自己行为的类中,依靠继承和多态建立彼此之间的关系。
面向切面就是,将不同对象中相同的功能抽取出来,封装在通用的类中,使原来的对象共享相同的行为。当功能发生改变时,只需要修改共享的行为。
Spring使用到的设计模式
1 静态工厂
BeanFactory就是一个静态工厂,根据传入的参数,动态创建一个类实例。
2 工厂方法
Spring管理的是一个工厂类,通过这个工厂类的方法创建类实例。
<bean id="random" class="example.RandomFactory" factory-method="createRandom" scope="prototype">
3 单例模式
使用singleton参数创建bean。spring默认的对象是singleton
4 适配器(Adapter)
spring的aop中,通过动态代理创建代理类,代理类定义了新的适配方法的接口。
5 代理(Proxy)
动态代理
6 观察者(Observer)
常用的是监听器的实现,比如ApplicationListener。
7 模板方法(Template Method)
JdbcTemplate