请简要介绍Sping MVC、IoC和AOP
Sping MVC是在Spring框架上发展起来的框架,它提供了构建Web应用程序的全功能MVC模块,使用了Spring可插入的MVC架构,可以自由的选择各个模块所使用的架构,非常灵活。Spring MVC把控制器、模型、分派器以及处理程序对象的角色进行了分离,因此,Spring MVC具有更好的可定制性。
IoC,即控制反转,是一种降低对象之间耦合关系的设计思想。IoC将组件间的依赖关系从程序内部提到外部来管理(即IoC容器管理),通过使用IoC,对象不会被显示的调用,而是根据需求通过IoC容器来提供。IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象,这一点使用过依赖注入实现的。对于Spring框架而言,就是由Spring容器来控制对象的生命周期和对象间的依赖关系,所有对象的创建、销毁都是由Spring来控制,故控制对象生存周期的不再是依赖它的对象,而是Spring容器。对于某个具体对象而言,以前是它控制其他对象,现在则是所有对象由Spring容器控制。Spring容器会根据配置文件来创建调用者对象,同时把被调用者的对象的实例化对象通过构造函数或者set()方法的形式注入到调用者对象中。
IoC的优点:
① 通过IoC容器,开发人员不需要关注对象如何被创建的,同时增加新类也非常方便,只需要修改配置文件即可实现对象的“热插拔”
② IoC容器可以通过配置文件来确定需要注入的实例化对象,非常便于进行单元测试
IoC的缺点
① 创建对象的流程变得比较复杂
② 对象是通过反射机制实例化得到的,因此会对系统的性能有一定影响
AOP即面向切面编程是对面向对象编程的一种补充,其允许开发人员在不改变原来模型的基础上动态的修改模型以满足新的需求。AOP利用一种称为“横切”的技术,能够解剖开封装的对象内部,并将那些影响了多个类并且与具体业务无关的公共行为封装成一个独立的模块,称为切面。AOP在Java中是通过反射机制实现的。AOP可以实现扩展功能的同时不修改原代码,将功能代码从逻辑代码中分离出来。
利用AOP实现的功能主要有日志记录、性能统计、安全控制、事务处理、异常处理等。
使用AOP的主要意图是将日志记录、性能统计、安全控制、事务处理、异常处理等代码从业务逻辑代码中分离出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,当改变这些行为的时候不会影响业务逻辑的代码。
AOP的特点是利用横向抽提机制,取代传统的纵向继承体系重复性代码。