spring-IoC容器

Spring的IoC容器

IoC在程序开发中,实例的创建不再由调用者管理,而是由Spring容器创建。Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了Spring容器中,控制权发生了反转,这就是Spring的IoC思想

Spring基础就是IoC/DI容器

public class BeanFactory{
   private static final Map<String,Object> map=new HashMap<>();
   public static Object getBean(String id){}
}

简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式解决方案) 轻量级开源框架

Spring的模块化结构

6个模块20多个子项目组成的,Spring的模块化是很强的,各个功能模块都是独立的,可以选择的使用
在这里插入图片描述
IoC(Inversion of Control):其思想是反转资源获取的方向
DI(Dependency Injection) — 即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源
注入. 相对于 IoC 而言,这种表述更直接

  • bean是Spring管理的基本单位,在Spring的应用中,所有的组件都是bean,bean包括数据源、Hibernate的SessionFactory及事务管理器等。 Spring里的bean是非常广义的概念,任何的Java对象,Java组件都可被当成bean处理。甚至这些组件并不是标准的JavaBean。整个应用中各层的对象都处于 Spring 的管理下,这些对象以 bean 的方式存在,Spring负责创建 bean 实例,并管理其生命周期。
  • bean在Spring容器中运行时,无须感受Spring容器的存在,一样可以接受Spring的依赖注入,包括bean属性的注入,合作者的注入及依赖关系的注入等

Spring优势

  • 低侵入/低耦合(降低组件之间的耦合度,实现软件各层之间的解耦。)
  • 声明式事务管理
  • 方便集成其他框架
  • 降低JavaEE开发难度
  • Spring框架中包括JavaEE 三层的每一层的解决方案 (一站式)

Spring功能

  • Spring能帮我们根据配置文件创建及组装对象之间的依赖关系
  • Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制
  • Spring能非常简单的帮我们管理数据库事务
  • Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套 JDBC访问模板,来方便数据库访问
  • Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring MVC 框架,来方便web层搭建
  • Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)

Spring的核心思想

  • 不重复发明轮子理论
  • 锤子理论

A a = new A1()然后通过a来调用接口的方法,对于C来说是主动实例化对象,直接获取依赖。
这种实现方法的缺点:

  • 更换实现需要重新编译源代码
  • 很难更换实现,很难测试
  • 耦合实例生产者和实例消费者

工厂模式

设计模式属于创建型模式,它提供了一种创建对象的最佳方式
主要解决:主要解决接口实现的选择问题。
优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产
品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口
缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,
在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
工厂模式中产品可扩展,但是产品只能一种系列

抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他
工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式
主要解决:提供一个创建一系列相关或相互依赖对象的接口,解决接口实现选择的问题
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

功能扩展

产品的系列不可扩展,引入资源文件,使用反射创建字串所指代的对象。
但是properties文件在IDE中缺乏语法检查,所以考虑采用xml作为配置

Spring的工厂模式实现

Spring框架最重要是提供了以类似上面xml+BeanFactory的方式管理配置在xml文件中的受管Bean

XML配置

XML可扩展标记语言,是一种依靠与SGML由w3c定义出来的标记语言。XML允许用户自定义标签,提供
了2种方式说明其中的标签: dtd[ 文档类型定义]或者xsd(模式类型定义)。
Xml文件可以分为无效、良构和有效的3种,一般对xml文件的解析至少要求良构的。

XML文件作用
  • 存储数据
  • 传递数据,即服务器以XML的形式传输数据
  • 软件配置,即通过配置XML文件,通知应用程序如何处理业务
XML和Html的关系

XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:

  • XML 被设计用来传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息,而 XML 旨在传输信息。

XML文件的解析模型

DOM
DOM是W3C处理XML的标准API,它是许多其它与XML处理相关的标准的基础,不仅是Java,其它诸如
Javascript,PHP,MS .NET 等等语言都实现了该标准, 成为了应用最为广泛的XML处理方式

  • 形成树结构,直观好理解
  • 解析过程中树结构保留在内存中,方便修改
  • 当xml文件较大时,对内存消耗比较大,容易影响解析性能并造成内存溢出
  • 适用范围:小型XML文件解析、需要全解析或者大部分解析XML、需要修改XML树内容以生成自己 的对象模型

SAX
SAX使用了最少的系统资源和最快速的解析方式对XML处理提供了支持。 但随之而来繁琐的查找方式也给广大程序员带来许多困扰,常常令人头痛不已

  • 采用事件驱动模式,对内存消耗比较小
  • 适用于只需要处理xml中数据时
  • 不易编码
  • 很难同时访问同一个xml文件中的多处不同位置

适用范围:大型XML文件解析、只需要部分解析或者只想取得部分XML树内容、有XPath查询需求、有自己生成特定XML树对象模型的需求

Spring基本框架结构

Spring是一种JavaEE开发中的一站式解决方案,所以其中包含的内容比较多,为了避免在应用中添加无
用功能,所以Spring采用了非强制性的模块化结构,在具体应用中,可以根据应用所需要的功能进行选
择添加
Spring3.x分为6大模块,Spring的模块化是很强的,各个功能模块都是独立的,可以选择的使用
在这里插入图片描述

  • Core模块是Spring应用的基础,提供了最基本的IoC/DI容器的支持和实现
  • AOP模块建立在Core模块的基础上,提供了AOP技术的支持,以简化AOP编程的复杂度
  • DAO和ORM模块建立在AOP的基础上,DAO提供了dao模式编程的简化支持,ORM提供了整合持久层框架的支持。同时在AOP的基础上给数据库访问提供了声明式事务的支持
  • JEE模块建立在Core模块的基础上,提供了针对EJB\邮件javaMail等企业级应用支持
  • Web模块建立在core模块的基础上,提供了整合其它表现层框架【例如Struts\JSF等】的支持,同时提出了自己的表现层框架SpringMVC[针对Struts1提出的]

Spring4.x分为6大模块,包括20多个子项目
在这里插入图片描述

  • Core container核心容器:beans core context context-support expression
  • AOP和apects提供AOP编程技术支持: aop aspects,另外还有其它的不是Spring的jar
  • Data Access/Integration针对DAO编程和ORM整合的支持: jdbc orm tx
  • Web提供了整合表现层框架和对应的web解决方案SpringMVC:web webmvc
  • Instrumentation底层基础,是一种没有图形界面的,具有启动能力的,用于监控其他类的工具类
  • Test提供了单元测试的支持,要求junit4.8+版本

Spring的全方位应用程序框架

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值