IOC - 注入外部bean

Posted ryan368

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOC - 注入外部bean相关的知识,希望对你有一定的参考价值。

如果不使用Spring, 当我们在一个类中要应用另一个类中的方法时, 需要在前类中创建后类的对象后再使用, 如下例:

我们要在 Animal 类中调用 Mammal 接口中的方法, 需要以下操作:

1. Mammal接口:

public interface Mammal {

    public void mammaltalk();
}

2. Dog类:

public class Dog implements Mammal{

    public void mammaltalk(){

        System.out.println("dog talks woof!");
    }
}

3. Animal类:

public class Animal {

    public void animaltalk(){
        System.out.println("animal talks XXXXXXXXXXXXX");

        //原始方式: 需要先创建dog实现类的对象再调用其方法
        Mammal dog = new Dog();
        dog.mammaltalk();
    }
}

4. 测试:

技术图片

 

 

 

而当我们使用Spring时, 要实现同样的需求, 需要相应地配置 xml文件, 具体方式如下:

1. Mammal接口和Dog实现类不变, Animal类改写如下: (设置对象属性, 以便通过Spring以set注入的方式注入属性)

package com.ryan.spring5.quoteOutBean;

public class Animal {

    private Mammal dog;

    public void setDog(Mammal dog) {
        this.dog = dog;
    }

    public void animaltalk(){
        System.out.println("animal talks XXXXXXXXXXXXX");
        dog.mammaltalk();

//        //原始方式: 需要先创建dog对象再调用其方法
//        Mammal dog = new Dog();
//        dog.mammaltalk();
    }
}

2. xml文件配置: (对象属性的值指定时要用ref, 将创建的dog对象赋值给test的dog变量)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dog" class="com.ryan.spring5.quoteOutBean.Dog"></bean>
    <bean id="test" class="com.ryan.spring5.quoteOutBean.Animal">
        <property name="dog" ref="dog"></property>
    </bean>
</beans>

3. 测试:

public class Test {

    public static void main(String[] args) {
//        Animal animal = new Animal();
//        animal.animaltalk();

        ApplicationContext context = new FileSystemXmlApplicationContext("src\\com\\ryan\\spring5\\quoteOutBean\\bean.xml");
        Animal animal = context.getBean("test", Animal.class);

        animal.animaltalk();
    }
}

技术图片

 

以上是关于IOC - 注入外部bean的主要内容,如果未能解决你的问题,请参考以下文章

Spring二刷笔记-IOC概念理解以及具体实现(xml和Annotation)

Spring6| Spring对IoC的实现(核心重点)

spring依赖注入

Spring IOC源代码具体解释之容器依赖注入

Spring IOC之注入

学习spring容器IOC之依赖和依赖注入