(三)Spring教程——依赖注入与控制反转

目录

前言        

New方式代码示例

创建Demo1类

运行程序 


前言        

        Spring框架是为了简化企业级应用开发而创建的,其强大之处在于对Java SE和Java EE开发进行全方位的简化,Spring还对常用的功能进行封装,可以极大地提高Java EE的开发效率。

        依赖注入是Spring的核心技术之一,也被称为“控制反转”,借助依赖注入技术,我们可以很方便地实现调用者和被调用者的分解,解耦类与类之间的关系。

        依赖注入(DI)指组件之间依赖关系由容器在运行期决定,即由容器动态地将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提高组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无须修改任何代码,也无需在意资源来自何处、由谁实现,就可以指定目标需要的资源,完成自身的业务逻辑。

        控制反转(IoC)并不是什么具体的技术,而是一种设计思想。在Java开发中通过IoC,将原本由程序代码直接操控的组件对象交由容器来操控,通过容器来实现组件对象的装配和管理。所谓“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。

        依赖注入和控制反转是同一个概念的不同角色描述,由于控制反转概念比较含糊(可能只是理解到容器控制对象这一个层面,很难让人想到由谁来维护对象关系),所以2004年Martin Fowler又给出了一个新的名字——依赖注入。相对控制反转而言,依赖注入明确描述了“被注入对象依赖控制反转容器来配置依赖对象”。依赖注入的具体含义是:当某个角色(调用者,可能是一个Java实例)需要另一个角色(被调用者,另一个Java实例)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring中,被调用者的创建工作不再由调用者来完成,因此这也被称作控制反转;被调用者实例的创建工作通常由Spring容器来完成,因此这也被称作依赖注入。

        在编写传统的Java应用代码时,我们一般是直接在对象内部通过new来创建对象,让程序主动去创建依赖对象,这就是一个“谁使用,谁创建”的过程,创建依赖对象的主动权和创建时机都是由自己来把控。

New方式代码示例

        下面用示例来说明传统的Java应用代码是怎么来创建对应并使用对象中的属性和方法。

创建Demo1类

        首先创建一个Demo1.java类,该类的代码如下所示

package com.example.servlet001;

public class Demo1 {

    public static void main(String[] args) {

        Person person=new Person();

        person.sayHello();

    }

}



class Person{

    public void sayHello(){

        System.out.println("hello");

    }

}

运行程序 

        运行该类后的输出如下图所示

        可以看到Demo1类和Person类之间存在着强耦合,Person类和方法修改时,Demo1类的代码也需要修改。

        而在Spring中,可以通过IoC容器动态地将某个依赖关系注入到组件之中。

      Spring有两个重要的接口:BeanFactory和ApplicationContext,所谓的容器就是实现了BeanFactory接口或者是ApplicationContext接口的类的实例,BeanFactory是最顶层、最基本的接口,它描述了容器需要实现的最基本的功能,比如对象的注册、获取等。

        ApplicationContext接口继承了BeanFactory接口,拥有BeanFactory接口的全部功能,还继承了ApplicationEventPublisher接口、ResourceLoader接口、MessageSource接口,提供应用事件发布、资源加载和国际化功能。在实际应用中,这些功能使得ApplicationContext接口比BeanFactory接口更加方便。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry95270628

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值