一、Spring基础
1、Spring的原理
spring是一个企业级的J2EE应用开发一站式的解决方案,提供的功能贯穿了项目开发的表现层,业务层,持久化层。同时,spring可以和其他应用无缝衔接,是java程序员必知必会的技术框架,学会使用是入门,知其原理才是目的,下面就简单聊聊原理组成,如果想更深入了解,那就必须得深入源码,如果有机会我也希望能试一试。
1.1、Spring的特性
Spring有许多优秀的特性,很多公司都选择它作为产品或项目的基础开发框架,Spring的特性包括轻量、控制反转(IOC)、面向容器、面向切面、框架灵活。
轻量:从jar包层面看:其核心jar包spring-web和spring-core的大小均为1.4MB左右;从系统资源上使用上看:运行期间只需少量的操作系统资源便能稳定运行;除此之外,它还有模块化,应用程序在使用过程中可以根据需求引入模块,来实现不同的功能。
控制反转(IOC):指一个对象依赖的其他对象将会在容器的初始化完成后主动将其依赖的对象出传递给它,而不需要这个对象自己创建或者查找其依赖的对象。
面向容器:spring通过从xml配置文件或注解中,创建bean并对其于容器中管理,而且每个bean默认情况下都是单例的。
面向切面:spring提供了面向切面的编程支持,面向切面就是对当前的代码进行增强,这样我们就能够做很多事了,比如说给当前的代码强化一个打日志的功能等等。
框架灵活:基于容器化的对象管理技术,spring中的对象可被声明式的创建,spirng作为y一个轻量级的框架,具有事务管理、持久化框架集成和Java web服务等功能。可以根据需求引入相关模块,实现不同的功能。
1.2、Spring的核心JAR包
Spring基于模块化实现,当然每个模块就对应不同的JAR包。下面简单介绍一些常用的
包名称 | 说明 |
---|---|
spring core | spring的核心工具包 |
spring Beans | SpringIoC的实现,通过xml文件或注解实现对Bean的管理 |
spring Context | spring上下文环境,用于对Bean关系的管理和维护等 |
spring Aspects | 对AspectJ框架的整合和支持(切面编程) |
spring Context Support | Springcontext的语言扩展,用于支持MVC方面的功能 |
spring Tx | 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式事务管理器和编程式事务管理 |
spring Web | 基于spring构建web应用开发所需的核心类,包括自动载入webApplicationContext、struts与JSF集成、文件上传、Filter类和其他辅助工具类 |
、、、 | 、、、、、、、、、、、、、、、 |
1.3、Spring的注解
spring使用注解将bean的定义和bean之间的依赖关系的配置从xml配置文件中解放出来,bean的定义变得更加简洁和方便。减少了xml配置文件中大量的bean定义内容,增加阅读性。
下面列举一些常用的注解:
1.4、Spring IoC的原理
ioc即控制反转,是一种设计思想,将对象的创建和对象之间依赖关系的维护交给容器来负责,以实现对象对对象之间的松耦合。
1.4.1、IOC简介
Spring通过一个配置文件描述Bean和Bean之间的依赖关系,利用Java的放射功能实例化Bean并建立Bean之间的依赖关系。Spring的IoC容器在完成这些底层工作的基础上,提供了Bean实例缓存管理、Bean生命周期,Bean实例代理,事件发布和资源装置等高级服务。
1.4.2、Spring Bean的装配流程
Spring在启动时会从Xml文件中或者注解中读取Bean配置信息,并在容器中生存一份Bean配置注册表,然后根据这张表实例化Bean,装配好Bean之间的依赖关系,最后将Bean放入Bean缓存池中,为上层业务提供。
1.4.3、Spring Bean的作用域
Singleton : 单例,多线程环境下不安全,默认作用域;
Prototype: 原型,每次获取Bean都将创建新的Bean实例;
Request: 在一次Http请求中容器会返回该Bean的同一个实例,对不同的Http请求则会创建新的Bean实例,并且该bean实例仅在当前HTTP请求内有效;
Session:一个HTTP会话中是同一个Bean;
Global Session:指在同一个全局的HTTP Session中容器会返回该Bean的同一个实例,仅在使用Portlet Context时有效;