常识:
Spring 是一个开源框架,是一种整合性的框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
Spring框架的基础,即:工厂模式与服务定位器模式等
IOC 即 Inversion Of Control,控制反转或者称之为依赖注入:【依赖注入是目前最优秀的解耦方式,依赖注入让Spring的Bean以配置文件组织在一起,而不是以硬编码的方式耦合在一起。】
设值注入:IOC容器使用属性的Setter方法来注入被依赖的实例。
构造注入:IOC容器使用构造器来注入被依赖的实例。
BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子接口。他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean。Bean是Spring管理的基本单位,在基于Spring的JavaEE应用中,所有的组件都被当成Bean处理,包括数据源、Hibernate的SessionFactory、事务管理器等。
解构组成:
- 核心容器 :核心容器提供 Spring 框架的基本功能。核心容器的主要组件是
BeanFactory
,它是工厂模式的实现。BeanFactory
使用 控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。- Spring 上下文 :Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
- Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
- 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。
https://developer.ibm.com/zh/articles/wa-spring12/
传统的三层架构
【1】dao—>service—>controller
【2】问题:上千次调用,维护解耦困难![service 被10000个controller调用,此时维护更改service的不同实现类,需要更改10000次的问题!]
【3】会出现依赖注入——耦合性很高的设计方式:通过容器的方式完成解耦【需要侵入代码,设置属性setget方法】
【4】Spring容器的设计:不侵入代码情况下——通过使用配置文件完成依赖关系的配置和注入!
-所有的实现类都需要注册金容器才能托管解耦。——通过读取xml配置文件获取全类名【】
-只有从容器当中获取的实现类,才是解耦后的对象。——托管给容器以后,使用容器提供的功能,必须从容器当中获取对象。
-实现依赖与注入,通过配置文件
IoC:依赖注入以配置文件管理BEAN实例之间的耦合,让BEAN实例之间的耦合从代码层次分离出来,依赖注入是一种优秀的解耦方式。
程序实现解构:
建议采用以设值注入为主,构造注入为辅的注入策略。对于依赖关系无须变化的注入,尽量采用构造注入;而其他的依赖关系的注入,则考虑采用设值注入。