spring简介
Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring使开发者能够编写更干净、更可管理、并且更易于测试的代码。它具有以下几个作用
- 方便解耦,简化开发。
- AOP编程的支持。
- 声明式事务的支持。
- 方便程序的测试。。
- 方便集成各种优秀框架。
- 降低Java EE API的使用难度。
spring 的结构和组件
在比较老的3.1.3版本的spring中,spring的模块如下:
spring模块
一个模块基本代表一个功能,比如我们在spring中经常使用的JdbcTemplate,实际上就是jdbc模块的代码;SpringMVC是web模块的功能。我们可以在我们的项目中引用一个或者多个模块(maven的dependency)来完成我们的业务需求。
结构图
核心组件
spring-core 和 spring-beans
spring-core包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心。spring-beans实现了springIoC(依赖注入),所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / DependencyInjection(IoC/DI)操作相关的所有类。spring-core依赖commons-logging包。spring-beans依赖spring-core包。
spring-context和spring-context-support
Context包,构建于Core包上,提供了一种框架式访问对象的方式,有点像JNDI注册。Context封装包继承了beans包的功能,还增加了透明创建上下文(通过servlet容器),国际化(I18N),事件传播,资源装载等功能。spring-context-support是spring-context的扩展支持,包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(JavaMail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。
非核心组件
spring-aop和spring-aspect
这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的其它Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。
spring-jdbc ,spring-dao,spring-orm
spring-jdbc包含对Spring对JDBC数据访问进行封装的所有类;spring3以上已经找不到spring-dao了,这是因为spring-dao被放到了spring-transaction里面去了;spring-orm包含Spring对DAO特性集进行了扩展,使其支持 iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。
这个jar文件里大部分的类都要依赖spring-dao.jar里的类,用这个包时你需要同时包含spring-dao.jar包。
spring-web和spring-webmvc
Web包提供了基本的面向Web的综合特性,例如多方文件上传,利用Servlet listeners进行IoC容器初始化和针对Web的applicationcontext。当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。
Web MVC提供了面向Web应用的Model-View-Controller实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和web form之间。并且,还可以借助Spring框架的其他特性。
spring-transaction(spring-tx)
提供对事务的支持。
spring的核心思想
控制反转IOC(Inverse of Control)
控制反转是一种在软件工程中解耦合的思想,调用类只依赖接口,而不依赖具体的实现类,减少了耦合。控制权交给了容器,在运行的时候才由容器决定将具体的实现动态的“注入”到调用类的对象中。
依赖注入(Dependnecy Injection)
依赖注入是一种设计模式,可以作为控制反转的一种实现方式。依赖注入就是将实例变量传入到一个对象中去(Dependency injection means giving an object its instance variables)。
通过IoC框架,类A依赖类B的强耦合关系可以在运行时通过容器建立,也就是说把创建B实例的工作移交给容器,类A只管使用就可以。
面向切面编程(AOP)
在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
网友评论