浅谈spring(一)—— 概述

什么是Spring?

Spring是一个开源框架,是为了解决企业级应用开发的复杂性而创建的,Spring的根本使命是简化java开发

 

为了降低java开发的复杂性,Spring的采取了四种关键策略:

1.基于POJO的轻量级和最小侵入性编程 

Spring竭力避免因自身的API而弄乱你的应用代码。Spring不会强迫你实现Spring规范的接口或继承Spring规范的类。相反,在基于Spring构建的应用中,它的通常没有任何痕迹表明你使用了Spring。最坏的场景是,一个类或许会使用Spring注解,但它依旧是POJO.

举个例子:

public class HelloWorldBean{
    public String sayHello(){
       return "Hello World";
 }
}

可以看到,这是一个简单普通的java类——POJO。没有任何地方的表明它是一个Spring组件。Spring的非法侵入编程意味着这个类在Spring应用和非Spring应用中都可以发挥同样的作用。

 

2.通过依赖注入和面向接口实现耦合

传统的做法,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这将会导致高度耦合和难以测试的代码。

public class A implemets B{
  private C c;
  public A(){
   this c = new C();
}
}

在A的构造函数中,直接创建了C的实例,这使得A和C紧密的联系在一起,当你想对C进行修改时,你将不得不对A也进行一定的 操作。比如,你想给A中的成员变量C换一种实现。这样高耦合度是难以测试,难以复用的。

但是,一定程度的耦合是必须的,为了完成有意义的功能,不同的类必须以适当的方式进行交互

通过DI,对象的依赖关系将由系统负中负责协调各个对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理它们的依赖关系。

例子:

public class A implements B{
  private C c;
  public A(C C){
   this.c = c;
 }
}

上面是依赖注入的方法之一,构造器注入。A并没有和任何特定的C发生耦合,对A来说,只要实现了C接口,至于C是那种具体类型的实现A并不关心。这就是DI的所带来的最大收益——松耦合。如果一个对象只通过接口(而不是具体实现或初始化过程)来表明依赖关系,那么这种依赖就能够在对象毫不知情的情况下,用不同的具体实现进行替换。

3.基本切面和惯例进行声明式编程

面向切面编程允许你把遍布应用各处的功能分离出来形成可重用的组件。诸如日志,事务管理和安全这样的系统服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为它们会跨越系统的多个组件。

AOP能够使服务模块化,比如,你并不需要在学生服务,或者讲师服务,内容服务等模块同时调用日志模块,安全模块,事务管理模块等,你只需要以声明的方式将这些共用模块应用到它们需要影响的组件中去,使学生服务等组件具有更高的内聚性并且更加关注自身的业务。总之,AOP能够确保POJO的简单性。

4.通过切面和模板减少样板式代码

通常为了实现通用和简单的任务,不得不一遍遍的重复编写相同的代码,这样的代码就是样板式代码。

如JDBC访问数据库查询数据,你需要建立连接,执行语句对象,得到结果集,在判断连接,结果集,语句对象是否为空,然后在执行关闭操作,你会发现这些操作代码,在你执行其他操作,如增删改,都是同样需要的,而且一模一样。在其他场景也会有类似的样板式代码,如JMS,JNDI和使用REST服务等。

Spring旨在通过模板封装来消除样板式代码,如JdbcTemplate使得执行数据库操作时,避免传统的的JDBC样板代码称为可能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值