- 方便解耦简化开发,通过Spring提供嘚IoC容器我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高
- AOP编程的支持,通过Spring提供的AOP功能方便进行面向切面编程。
- 声明式事务的支持在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来通过声明式方式灵活地进行事务的管理,提高开發效率和质量
- 方便程序的测试,可以用非容器依赖的编程方式进行几乎所有的测试工作
- 方便集成各种优秀框架,Spring提供了对各种优秀框架的直接支持
如下图所示,整个什么是spring框架架按其所属功能可以划分为五个主要模块这五个模块几乎为企业应用提供了所需的一切,從持久层、业务层到表现层都拥有相应的支持这就是为什么称Spring是一站式框架的原因。
Spring的核心模块实现了IoC的功能它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述由IoC容器负责类的创建,管理获取等。BeanFactory接口是什么是spring框架架的核心接口实现叻容器很多核心的功能。
Context模块构建于核心模块之上扩展了BeanFactory的功能,包括国际化资源加载,邮件服务任务调度等多项功能。ApplicationContext是Context模塊的核心接口
表达式语言(Expression Language)是统一表达式语言(EL)的一个扩展,支持设置和获取对象属性调用对象方法,操作数组、集合等使用它可鉯很方便的通过表达式和Spring IoC容器进行交互。
该模块包括了JDBC、ORM、OXM、JMS和事务管理:
- 事务模块:该模块用于Spring管理事务只要是Spring管理对象都能得到Spring管悝事务的好处,无需在代码中进行事务控制了而且支持编程和声明性的事务管理。
- JDBC模块:提供了一个JBDC的样例模板使用这些模板能消除傳统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处
- ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括hibernate、JPA、MyBatis等而且可以使用Spring事务管理,无需额外控制事务
- JMS模块:用于JMS(Java Messaging Service),提供一套“消息生产者、消息消费者”模板用于更加简单的使用JMSJMS用于在兩个应用程序之间,或分布式系统中发送消息进行异步通信。
Spring可以用非容器依赖的编程方式进行几乎所有的测试工作支持JUnit和TestNG等测试框架。
我们首先来讲解一下IoC的概念IoC(控制反转:Inverse of Control)是Spring容器的核心,但是IoC这个概念却比较晦涩让人不太容易望文生义。
1、IoC控制反转和DI依赖注入
传统程序设计中我们需要使用某个对象的方法,需要先通过new创建一个该对象我们这时是主动行为;而IoC是我们将创建对象的控制权交給IoC容器,这时是由容器帮忙创建及注入依赖对象我们的程序被动的接受IoC容器创建的对象
,控制权反转所以叫控制反转。
由于IoC确实鈈够开门见山所以提出了DI(依赖注入:Dependency Injection)的概念,即让第三方来实现注入以移除我们类与需要使用的类之间的依赖关系。总的来说IoC昰目的,DI是手段创建对象的过程往往意味着依赖的注入。我们为了实现IoC让生成对象的方式由传统方式(new)反转过来,需要创建相关对象时甴IoC容器帮我们注入(DI)
简单的说,就是我们类里需要另一个类只需要让Spring帮我们创建 ,这叫做控制反转
;然后Spring帮我们将需要的对象设置箌我们的类中这叫做依赖注入
。
2、常见的几种注入方法
.URL,File)等并不能很好很方便的满足各种底层资源的访问需求Spring设计了一个Resource接口,为应用提供了更强的访问底层资源的能力该接口拥有对应不同资源类型的实现类。Resource在什么是spring框架架中起着不可或缺的作用什么是spring框架架使用Resource裝载各种资源,包括配置文件资源国际化属性资源等。
- ClassPathResource:类路径下的资源 资源以相对于类路径的方式表示
- FileSystemResource:文件系统资源,资源以文件系统路径方式表示如d:/a/.URL。用户能够访问任何可以通过URL表示的资源如Http资源,Ftp资源等
3、Spring的资源加载机制
为了访问不同类型的资源必须使鼡相应的Resource实现类,这是比较麻烦的Spring提供了一个强大的加载资源的机制,仅通过资源地址的特殊标识就可以加载相应的资源首先,我们叻解一下Spring支持哪些资源类型的地址前缀
:
-
BeanFactory是一个类工厂和传统的类工厂不同,传统的类工厂仅负责构造一个类或几个类的实例;而BeanFactory可鉯创建并管理各种类的对象Spring称这些被创建和管理的Java对象为Bean。
beanName)该方法从容器中返回指定名称的Bean。此外BeanFactory接口的功能可以通过实现它的接ロ进行扩展(比如ApplicationContext)。看下面的示例:
//加载配置文件并启动IoC容器 //从容器中获取Bean对象XmlBeanFactory装载Spring配置文件并启动IoC容器通过BeanFactory启动IoC容器时,并不会初始化配置文件中定义的Bean初始化创建动作在第一个调用时。在初始化BeanFactory必须提供一种日志框架,我们使用Log4J
Spring通过一个配置文件描述Bean与Bean之间的依賴关系,通过Java语言的反射技术能实例化Bean并建立Bean之间的依赖关系Spring的IoC容器在完成这些底层工作的基础上,还提供了bean实例缓存、生命周期管理、事件发布资源装载等高级服务。
通过HierarchicalBeanFactory接口Spring的IoC容器可以建立父子层级关联的体系:
子容器可以访问父容器的Bean,父容器不能访问子嫆器的Bean
Spring使用父子容器实现了很多功能,比如在Spring MVC中控制器Bean位于子容器中,业务层和持久层Bean位于父容器中但即使这样,控制器Bean也可鉯引用持久层和业务层的Bean而业务层和持久层就看不到控制器Bean。
更多精彩文章关注公众号【ToBeTopJavaer】,更有数万元精品vip资源免费等你来拿!!!