Spring 实战第四版 DI 入门

本文介绍了Spring如何通过基于POJO的轻量级和最小侵入性编程简化Java开发的复杂性,重点讲解了依赖注入(DI)的概念,展示了如何通过DI实现对象间的松耦合,提高代码的可测试性和可维护性。

工作了快一年的时间,感觉没有系统的学习过Spring,在这边开一个博客,记录一下Spring第四版的学习。

1 Spring 如何简化Java 开发的复杂性

  • 基于pojo的轻量级和最小侵入性编程
  • DI和面向接口实现松耦合
  • AOP和惯例进行声明式编程
  • 通过切面和模板减少样板式代码

1.1 基于pojo的轻量级和最小侵入性编程

Spring不会强迫你实现Spring规范接口或继承Spring规范的类,没有任何痕迹表明你使用了Spring。

例子: spring在这个bean上面不会有任何不合理的请求

package com.habuma.spring; public class HelloWorldBean {
  public String sayHello() {
    return "Hello World";
} }

这就是一个简单的普通的Java类,POJO。Spring的非侵入编程意味着这个类在spring和非spring的应用中都可以发挥作用!!!!

1.2 依赖注入

任何一个有实际意义的应用,都会有两个或者更多的类组成。这些类相互之间进行协作来完成特定的业务逻辑。

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

package com.springinaction.knights;
public class DamselRescuingKnight implements Knight {
    private RescueDamselQuest quest;
    
    public DamselRescuingKnight() { 
        this.quest = new RescueDamselQuest(); //quest与救公主强耦合,这个骑士只能救公主
    }

    public void embarkOnQuest() { 
        quest.embark();
    } 
}

上面的例子中,我们的骑士的quest与救公主的quest有着强耦合,这个骑士只能做救公主一件事情。在测试方面,当你要调用embarkOnQuest的时候,你的emark方法也要保证被调用。测试起来很麻烦!!!

通过DI,对象的依赖关系将由系统中负责协调对象的第三方组件在创建对象的时候进行设定。就是由spring的依赖注入模块来做!!!

DI 例子:

package com.springinaction.knights;

public class BraveKnight implements Knight { 
    private Quest quest;

    public BraveKnight(Quest quest) { //构造器注入
        this.quest = quest;
    }

    public void embarkOnQuest() {
        quest.embark();
    }
}

这里面的braveknight没有自行创建探险任务,而是在构造的时候把探险任务作为参数传入,这就是构造器注入。同时,这个骑士也可以响应各种任务!!!因为传入了一个Quest接口的对象。

要点:brave knight 没有入任何特定的quest发生耦合,任何实现了quest接口的对象都可以传进来,具体是哪一种类型的探险就无关紧要了。这就是DI带来的最大收益,松耦合如果一个对象只通过接口(而不是具体实现或初始化过程)来表明依赖关系,那么这种依赖就能够在对象本身毫不知情的情况下,用不同的具体实现来替换!!!!

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值