• Spring中的依赖注入(1)


    可以看新写的第2版:https://www.cnblogs.com/yang37/p/12811265.html

    依赖注入:DI 又称控制反转:IoC

    项目名字spring_DI

    一、implement包中定义了两个接口Food和Person

    1.接口Food

    package org.interfaces;

    public interface Food {
    public String eat(); //food接口有被吃的方法待实现
    }

    2.接口Person

    package org.interfaces;

    public interface Person {
    public void eatFood(); //人接口有吃东西的方法待实现
    }

    二、.这两个接口有对应的实现类来实现其中的方法

    1.Food实现类Apple

    package org.interfaces.impl;

    import org.interfaces.Food;

    public class Apple implements Food{
    public String eat() {
    return "eating apple"; //实例化food 指明了是吃苹果
    }
    }

    2.Person实现类Man

    package org.interfaces.impl;

    import org.interfaces.Food;
    import org.interfaces.Person;

    public class Man implements Person{
    private Food food;

    public void setFood(Food food) {
    this.food = food;
    }

    public void eatFood() {
    System.out.println(food.eat());
    }
    }

    三、配置文件

    <bean id="man" class="org.interfaces.impl.Man"> //bean id形象点 class指明这个注入用在哪里
    <property name="food"> //food是Food接口类型对应的变量
    <ref bean="apple"/> //ref元素表示引用 引用其他bean的值
    </property>
    </bean>
    <bean id="apple" class="org.Interface.impl.Apple"> </bean> //food接口的实现类在哪

    四、编写测试类Test

    package org.test;

    import org.interfaces.Person;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;

    public class Test {
    public static void main(String args[]){
    ApplicationContext context =new FileSystemXmlApplicationContext("src/applicationContext.xml");
    Person p = (Person)context.getBean("man");
    p.eatFood();
    }
    }

    于以上代码的理解

    package org.interfaces.impl;

    import org.interfaces.Food;

    import org.interfaces.Person;

    public class Man implements Person{
    private Food food;


    public void setFood(Food food) {
    this.food = food;
    }


    public void eatFood() {
    System.out.println(food.eat());


    // 人接口实例化对象Man
    // food是接口啊 接口相当于一份图纸 得造出来实际的东西才能用这个东西拥有的方法啊 怎么能直接使用eat()方法呢?

    //下面是spring中的配置 无非就是指明Food接口的实现类为Apple


    // <bean id="man" class="org.interfaces.impl.Man"> //bean id形象点 class指明对应的类
    // <property name="food"> //food是Food接口类型对应的变量 Man中的food没有指明对应的实现类
    //    <ref bean="apple"/> //ref元素表示引用 引用其他bean的值 表示food接口的实现类去问那个叫apple的bean
    // </property> 
    // </bean>


    // <bean id="apple" class="org.Interface.impl.Apple"> </bean> //food接口的实现类在哪

    //这个bean就指明了Food接口的实现类是Apple 注意上面的food不是接口名 是作为一个变量来接收实例化对象

    //1.在bean中指明了对food属性注入 即name="food"
    //2.注入的值为 apple
    //3.所以我们可以理解为 当需要实例化的对象来使用eat()方法时
    // spring帮忙创造了这个接口的实例化对象apple 这个过程是自动的
    //问:有写food的实例化对象apple啊 为嘛我们不直接apple.eat
    // 如果要apple.eat
    // food = new Apple();
    // System.out.println(food.eat());
    // 是不是就要new一个apple?这样我们人的实例Man就与Apple绑定在了一起 产生耦合
    // 利用spring 我们可以再写一个实现类Pear 这样Man中无需修改 我们就能吃到梨子

    }
    }

  • 相关阅读:
    前端通过ajax请求,调用net core webapi接口
    WeUI——手机验证码
    Docker学习笔记之--安装mssql(Sql Server)并使用Navicat连接测试(环境:centos7)
    Docker学习笔记之-推送镜像到Registrys仓库
    PuppeteerSharp 在asp.net中使用 PuppeteerSharp生命周期管理
    vscode 插件记录下
    angular 项目8升级9 踩坑
    Skoruba.IdentityServer4.Admin 踩坑
    VUE-MATOMO实现埋点
    netcore rpm
  • 原文地址:https://www.cnblogs.com/yang37/p/10920431.html
Copyright © 2020-2023  润新知