组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
| 模块 | 说明 |
|---|---|
| 核心容器Spring Core | 核心容器,提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。 |
| Spring Context | Spring上下文,是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 |
| Spring AOP | 通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。可以很容易地使 Spring框架管理的任何对象支持AOP。Spring AOP模块为基于Spring 的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,就可以将声明性事务管理集成到应用程序中。 |
| Spring DAO | JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。 |
| Spring ORM | Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 |
| Spring Web | Web上下文模块建立在应用程序上下文模块之上,为基于Web 的应用程序提供了上下文。所以Spring 框架支持与Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。 |
| Spring MVC框架 | MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。 |
核心组件
| 模块 | 说明 |
|---|---|
| BeanFactory | Spring内部使用,创建bean的工厂 |
| ApplicationContext | 外部应用程序调用,也成为spring容器的上下文 |
| IoC控制反转 Inversion of Control |
开发者在无需自己new对象,无需关心对象的创建过程 User user = new User(); 手动创建对象 User user = context.getBean(user); 容器创建对象 |
| DI依赖注入 Dependency Injection |
松耦合方式实现对象直接的依赖 |
| AOP面向切面编程 | 补充java面向对象的不足 |
主要jar组成
| 模块 | 说明 |
|---|---|
| org.springframework.core | 核心工具包,其他包依赖此包 |
| org.springframework.beans | 核心,包括:配置文件,创建和管理bean等 |
| org.springframework.aop | 面向切面编程,提供AOP的实现 |
| org.springframework.context | 提供IoC功能上的扩展服务,此外还提供许多企业级服务的支持,邮件、任务调度、JNDI定位、EJB集成、远程访问、缓存以及多种视图层框架的支持 |
| org.springframework.web.mvc | 包含SpringMVC应用开发时所需的核心类 |
| org.springframework.transaction | 为JDBC、Hibernate、JDO、JPA提供一致的声明式和编程式事务管理 |
| org.springframework.web | 包含Web应用开发时所需支持类 |
| org.springframework.aspects | 提供对AspectJ框架的支持 |
| org.springframework.test | 对junit等测试框架的简单封装 |
| org.springframework.asm | 3.0后提供自己独立的,反编译 |
| org.springframework.context.support | Context的扩展支持,用于mvc方面 |
| org.springframework.expression | Spring表达式语言 |
| org.springframework.instument | 对服务器的代理接口 |
| org.springframework.jdbc | 对jdbc的简单封装 |
| org.springframework.jms | 为简化jms api的使用而做的简单封装 |
| org.springframework.orm | 整合第三方orm,如hibernate/mybatis |
| org.springframework.web.servlet | 增强servlet |
IoC(Inversion of Control)控制反转
就是指将对象的创建,对象的存储(map),对象的管理(依赖查找,依赖注入)交给了spring容器。
Bean对象的多实例
在Spring容器中管理的Bean对象,的作用域可以通过scope属性或用相关注解指定其作用域,最常用是singleton,prototype。其含义如下:
singleton:单例,是默认值。这个作用域标识的对象具备全局唯一性。
singleton负责对象的创建、初始化、销毁。
prototype:多例。这个作用域标识的对象每次获取都会创建新的对象。
prototype只负责对象的创建和初始化,不负责销毁。
用单例,是因为没必要每个请求都新建一个对象,这样子既浪费CPU又浪费内存
用多例,是为了防止并发问题;即一个请求改变了对象的状态,此时对象又处理另一个请求,而之前请求对对象状态的改变导致了对象对另一个请求做了错误的处理;
当对象含有可改变的状态时(更精确的说就是在实际应用中该状态会改变),则多例,否则单例;
//测试spring管理bean对象
@Test
public void ioc(){
//加载核心配置文件
ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext( “applicationContext.xml”);
//获取bean对象
//hi是在配置文件中bean对象的id值
Hello h = (Hello) ac.getBean(“hi”);
Hello h2 = (Hello) ac.getBean(“hi”);
//==判断两个对象的地址值
//单例返回true,多例返回false
System.out.println(h==h2);
//调用bean对象的方法
h.hi();
<!— 当构造函数中有多个参数时,
需要index属性绑定参数的位置
注意:index属性的值从0开始
—>
