1. Spring 的IOC容器思想
2.什么是Spring
3. Spring优点
4. Spring三大模块介绍
5. spring的两种IOC容器介绍和区别
(本文非常适合新手浅看,或者刚接触学习的,基本上都能看懂,有个大概认知,
最好是在初步使用过 最简单基础的 IOC和AOP案例时,就100%能看懂)
------Spring中的 IOC容器
IOC的思想是
控制反转:
所谓IOC是指 实例(对象) 不在由调用者来创建,而是由Spring容器创建,Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制
这样控制权由应用代码转移到了外部容器,控制权发生了反转, 所以称为 控制反转思想
------什么是 Spring?
是 分层 的 轻量级开源框架 ,以 IOC(控制反转) 和AOP(面向切面编程) 为内核
通常服务器端采用三层体系架构:
表示层 (web)
业务逻辑层 (service)
持久层 (dao)spring对每一层都提供技术支持,
各种技术给予 java程序员许多自由度,因此在开源社区受了广泛欢迎,并且被大部分公司作为重要框架
------Spring 框架优点
简单,可测试和松耦合 的特点
1. 方便解耦 ,简化开发
2. AOP编程的支持
3. 声明式事务的支持:
只需要通过配置文件就可以完成对事务的 关联,无需手动编程
4. 方便程序测试:
Spring对JUnit4支持,可以通过注解方便测试Spring程序
5. 降低JavaEE API的使用难度:
spring 对 javaEE开发中非常难用的一些API (JDBC....)都提供了封装,使这些API用于难 度大大降低
------Spring分为三大模块(基本都有简单基础介绍,落下很少)
--------核心容器(Core Container)
1) Core和Bean
封装了框架最底层的代码,提供IOC (控制反转) 和依赖注入
2) Context模块
构建于Core和Bean 之上 ,继承了Beas的特性 ,添加了对容器生命周期等的创建支持, ApplicationContext接口是实现Context 模块的关键
3) Expression Language模块
提供了一个强大的表达式语言用于在运行时查询和操纵对象
---------数据访问/集成(DataAccess/Intergration)
1) JDBC模块
提供了一个JDBC抽象层 ,可以消除冗长的 JDBC编码和解析数据库厂商特有的错误代码
2) ORM模块
该模块为流行的对象关系映射API提供一个交互层
3) OXM模块
提供了一个对Object/XML映射实现的抽象层
4) JMS模块
是一个Java平台中关于面向消息中间件(MOM)的API,用来在两个应用程序之间, 或 分布式系统中发送消息,进行异步通信
5) Transaction 模块
支持编程和声明性事务管理,这些事务必须实现特定接口,并且对所有的POJO(实 体类)都适用
----------------- Web
1) Web模块
提供基础 Web 功能
2) Web-Servlet 模块
3) Web-Struts 模块
4) Web-Porlet 模块
其他模块
1) AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现,它可以让你定义 例如方法拦截器 和切点 ,从而将逻辑代码分开,降低它们之间耦合度 等 ....
2) Test模块
支持使用JUnit和TestNG对Spring组件进行测试
3) Instrumentation模块
4) Aspects模块
------Spring为我们提供了两种IoC容器,分别为
1)BeanFactory
是基础类型的IoC容器,提供了完整的IoC服务支持,BeanFactory就是一个管理Bean的工程,它主要负责初始化各种Bean,并调用它们的生命周期方法(是加载配置文件后,实现的功能)
2) ApplicationContext
是BeanFactory的子接口,也被称为应用上下文,它不仅提供了BeanFactory的所有功能,并且还以一种更加面向框架的方式增强了BeanFactory的功能
创建语法为:
ApplicationContext applicationContext new ClassPathXmlApplicationContext("ApplicationContext.xml");
两种都是通过XML配置文件加载Bean的,相比之下
ApplicationContext 提供了更多的扩展功能,其主要优势在于延迟加载:
如果Bean的某一个属性没有注入成功,
使用BeanFactory加载后在第一次调用getBean()方法时会抛出异常
而使用ApplicationContext
则会在初始化时自检,有利于检查所依赖是否注入。因此,实际开发中通常使用ApplicationContext
(有什么讲述不对的地方非常非常欢迎大家提出修改,基本概念来自 教材书本和很少量搜索+理解)