Spring学习(四)Spring容器的IOC应用

一、Spring IOC概念

IOC全称Inversion of Control,被译为控制反转。
IOC是指程序中对象的获取方式发生反转,由最初的new方式创建,转变为由第三方框架创建、注入。第三方框架一般是通过配置方式指定注入哪一个具体实现,从而降低了对象之间的耦合度。
IOC按实现方法不同,可以分为依赖注入DI(Dependency Injection)和依赖查找两种,Spring容器是采用DI方式实现了IOC控制,IOC是Spring框架的基础和核心;

从IOC概念来看,IOC帮我们干了两件事,一就是创建对象二就是管理对象之间的关系。通过IOC中文的翻译,控制反转我们也更容易理解了,以前我们想要调用一个类中的方法,我们必须主动new对象,然后再调用方法。现在呢?Spring替我们把这件事干了,现在我们由主动创建对象转变为被动注入,以前的主动权在我们手里,现在主动权在Spring手里,以前我们创建的对象的硬编码转变为动态注入了,这也提高了我们程序的健壮性,降低了耦合度。我觉得这就是IOC的核心所在。

DI全称是Dependency Injection ,被译为依赖注入。

DI的基本原理就是将一起工作具有关系的对象,通过构造方法参数或方法参数传入建立关联,因此容器的工作就是创建bean时注入那些依赖关系。

IOC是一种思想,而DI是实现IOC的主要技术途径。

DI主要有两种注入方式,即Setter注入和构造器注入。

setter注入
通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现setter方式的注入。

public class Hello {
    public void sayHello() {
        System.out.println("say hello");
    }
}

public class HelloSpring {
    private Hello hello;

    //setter注入
    public void setHello(Hello hello) {
        this.hello = hello;
    }

    public void sayHello() {
        hello.sayHello();
    }
}

在applicationContext.xml中配置注入参数

//告诉Spring容器实例化Hello Bean
<bean id="hello" class="com.spring.demo.Hello"></bean>

//实例化HelloSpring时将hello通过setter方法注入到HelloSpring中
<bean id="helloSpring" class="com.spring.demo.HelloSpring">
    //property表示属性,也就是成员变量
    //name表示成员变量的名称
    //ref表示引用,也就是将id为hello的bean作为参数注入
    <property name="hello" ref="hello">
</bean>

setter注入图解
这里写图片描述
同样我们以Hello为例,演示一下Constructor(构造器)注入

public class Hello {
    public void sayHello() {
        System.out.println("say hello");
    }
}

public class HelloSpring {
    private Hello hello;

    //根据规范使用有参构造必须向外界提供无参数构造
    public HelloSpring(){}

    //Constructor注入
    public HelloSpring(Hello hello) {
        this.hello = hello;
    }

    public void sayHello() {
        hello.sayHello();
    }
}

在applicationContext.xml中配置注入参数

//告诉Spring容器实例化Hello Bean
<bean id="hello" class="com.spring.demo.Hello"></bean>

//实例化HelloSpring时将hello通过Constructor注入到HelloSpring中
<bean id="helloSpring" class="com.spring.demo.HelloSpring">
    //constructor-arg表示构造器参数
    //index表示第几个参数,也就是参数的索引,从0开始
    //ref表示引用,也就是将id为hello的bean作为参数注入
    <constructor-arg index="0" ref="hello"/>
</bean>

我想通过Spring中的依赖注入我们就能知道,java中甚至是所有编程语言中规范的重要性了,如果没有遵守JavaBean规范,那么Spring就根本无法为我们工作。当然其他依赖JavaBean规范的框架也都无法为我们服务。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值