Spring——重新学

Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

Spring的特点是:

1、轻量

        从大小与开销两方面而言Spring都是轻量的,完整的Spring框架可以在一个大小只有1M多的Jar文件里发布,并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的,如Spring应用中的对象不依赖于Spring的特定类。

2、控制反转

        Spring通过一种称作控制反转IOC的技术促进了低耦合,当应用了IOC,一个对象依赖的其他对象会通过被动的方式传递进来,而不是对这个对象自己创建或者查找依赖对象。

3、面向切面

        Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。

4、容器

        Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建(基于一个可配置原型,你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例)以及它们是如何相互关联的。

5、框架

        Spring可以将简单的组件配置,组合成为复杂的应用

        在Spring中,应用对象被声明式地组合,典型的是在一个XML文件里

        Spring也提供了很多基础功能(事务管理,持久化框架集成等),将应用逻辑的开发留给开发者。

Spring能够激发POJO的潜能

很多框架通过强迫应用继承他们的类或者实现它们的接口从而导致应用与框架绑死。一个典型的例子就是EJB的无状态Session Bean。早期的EJB就是这样的框架。

而在这方面Spring就做的很好。Spring竭力避免因为自身的API而弄乱你的代码。Spring不会强迫你实现Spring规范的接口或者继承Spring规范的类。

在基于Spring构架你的应用中,它的类通常没有任何痕迹表明你使用了Spring。最差情况就是一个会使用Spring注解的类。仅此而已。

Spring在对于POJO实行增强的方法就是用DI来装配他们。

Sping架构

Spring框架是分模块存在,除了最核心的Spring Core Container(即Spring容器)是必要模块之外,其他模块都是可选,视需要而定。大约有20多个模块。

Spring3与Spring4是有区别的,4.0主要是对Java 8的新函数式语法进行支持,还有加强了对网络各种新技术比如http-streaming, websocket的更好的支持。

一般来说,Spring主要分为7个模块:

依赖注入(DI)

依赖注入听起来很复杂。但是目前已经成为一个设计模式理念。在项目中使用DI的模式之后你会发现代码变得异常简单并且容易理解和测试。

DI的实现:任何一个有意义的应用都会由两个或者更多的类组成,这些类相互之间进行写作来完成特定的业务逻辑。传统的做法是:每个对象负责管理与自己相互写作的对象的引用。DI的做法是:对象的依赖关系由系统中负责协调个对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或者管理他们的依赖关系。依赖关系将被自动注入到需要他们的对象中。

DI带来的最大收益就是——松耦合。如果一个对象只通过接口来表明依赖关系,这种依赖就能够在对象本身毫不知情的情况下,用不同的具体实现进行替换。

对依赖进行替换的最常用方法就是在测试的时候是用mock来实现。

创建应用组件之间的写作的行为通常我们成为装配(wiring)。Spring有多种装配bean的方式。可以使用XML来进行装配。如果XML的配置不符合你的喜好,Spring还可以是用Java来描述配置文件。只要在Java代码中打上@Configuration 和@Bean的标签即可。

不管是使用基于XML的配置还是基于Java的配置,DI带来的收益都是一样的。

Spring通过应用上下文(Application Context)装载bean的定义并把它们组装起来。Spring应用上下文全权负责对象的创建和组装。Spring自带了多种应用上下文的实现,它们之间主要的区别仅仅是还在于如何加载配置。

应用切面(AOP)

DI能够让相互协作的软件组件保持松散耦合,而面向切面变成(AOP)允许你把遍布应用的各处的功能分离出来形成可重用的组件。

面向切面编程是为了促使软件系统实现关注点的分离的技术。系统由许多不同的组件组成,每个组件各负责一块特定功能。除了实现自身核心的功能之外。这些组件还经常承当额外的职责。例如:日志、事务管理和安全这样的功能。这些功能可以被称为是关注点。

如果将这些关注点分散到各个组件中实现的话,你的代码会带来更多的复杂度。

* 实现系统关注点功能的代码将会重复出现在多个组件中。

* 组件会因为那些与自身核心业务无关的代码变得混乱。

* AOP的作用就是使得这些服务模块化,并且以声明的方式将它们应用到它们需要影响的组件中去。所造成的结果就是使得这些组件会具有更高的内聚性并且会更加关注自身的业务,完全不用了解涉及系统服务所带来的复杂性。

使用模板消除样板式代码

在编码时候经常遇到为了实现通用的和简单的任务,不得不一遍遍的写的重复的代码,称之为样板方的代码。比如JDBC就会有一大堆的样本式的代码。

JDBC也不是产生样板式代码的唯一场景。在许多编程场景中都有类似的样板式代码,JMS、JNDI等也会大量的重复的代码。

Spring通过模板封装来消除样板式代码。Spring的JdbcTemplate就使得执行数据库操作时不使用样板式代码成为了可能。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值