美文网首页
Spring-DI(依赖注入)

Spring-DI(依赖注入)

作者: HeloWxl | 来源:发表于2019-12-14 14:54 被阅读0次

Spring DI依赖注入

  • setter设置注入(保证类中有提供setter方法)
  • 构造器注入
  • 命名空间注入

1、项目结构

image.png

1.1 pom.xml

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

1.2 Teahcer

public class Teacher {
  private String name ;
   private int age;
  //省略getter setter方法
}

1.3 Course

public class Course {
    private String courseName;
    private int courseHours;
    private Teacher teacher;
  //省略getter setter方法
}

2、setter方法注入

2.1 bean.xml

  <bean id="teacher" class="com.springdi.Teacher">
        <property name="age" value="22"></property>
        <property name="name" value="HeloWxl"></property>
    </bean>

    <bean id="course" class="com.springdi.Course">
        <property name="courseHours" value="100"></property>
        <property name="teacher" ref="teacher"></property>
        <property name="courseName" value="Java"></property>
    </bean>
  • Value:表示的是给name所表示的简单类型的属性赋值(如String,int)
  • Ref:表示的是“自定义类型”的对象属性赋值(如这里的Teacher),ref值的另一个bean的id值,从而实现多个bean之间的相互引用,相互依赖的关系

2.2 测试类

    @Test
    public void testDi(){
        //从spring容器获得 //1 获得容器
        String xmlPath="bean.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);

        //2获得内容 --不需要自己new,都是从spring容器获得
        Teacher teacher = (Teacher) applicationContext.getBean("teacher");
        System.out.println(teacher.toString());

        Course course = (Course) applicationContext.getBean("course");
        course.showInfo();
    }

2.3 测试结果

image.png

3、构造器注入

3.1 Course里面进行添加有参构造函数

  public Course(){
    }
    public Course(String courseName, int courseHours, Teacher teacher) {
        this.courseName = courseName;
        this.courseHours = courseHours;
        this.teacher = teacher;
    }

3.2 Teacher里面进行添加有参构造函数

  public Teacher(){}
    public Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }

3.3 bean.xml

  <bean id="course" class="com.springdi.Course">
        <constructor-arg value="Python"></constructor-arg>
        <constructor-arg value="12"></constructor-arg>
        <constructor-arg ref="teacher"></constructor-arg>
    </bean>
    <bean id="teacher" class="com.springdi.Teacher">
        <constructor-arg value="HeloWxl"></constructor-arg>
        <constructor-arg value="20"></constructor-arg>
    </bean>
  • 在bean中,<constructor-arg>的顺序要和构造方法中参数的顺序一样,即可保证第一个< constructor-arg>的value值赋值给了构造方法的第一个参数,第二个<constructor-arg>的value值赋值给了第二个参数。

如果不能保证<constructor-arg>的顺序和构造方法中参数的顺序一致,则可以使用index或者name属性指定

<!--    Index指定-->
    <bean id="course" class="com.springdi.Course">
        <constructor-arg value="java" index="0"></constructor-arg>
        <constructor-arg value="100" index="1"></constructor-arg>
        <constructor-arg ref="teacher" index="2"></constructor-arg>
    </bean>

<!--    Name指定-->
    <bean id="teacher" class="com.springdi.Teacher">
        <constructor-arg value="HeloWxl" name="name"></constructor-arg>
        <constructor-arg value="20" name="age"></constructor-arg>
    </bean>

3.4 测试方法同上

3.5 测试结果

image.png

4、命名空间方法注入

4.1bean.xml

需要在bean.xml头部引入

   xmlns:p="http://www.springframework.org/schema/p"
    <bean id="course" class="com.springdi.Course"
          p:courseHours="200"
          p:courseName=".NET"
          p:teacher-ref="teacher"
    />
    <bean id="teacher" class="com.springdi.Teacher"
          p:age="20" p:name="老王"
    />

4.2 测试方法同上

4.3 测试结果

image.png

相关文章

  • Spring-DI(依赖注入)

    Spring DI依赖注入 setter设置注入(保证类中有提供setter方法) 构造器注入 命名空间注入 1、...

  • 开源项目的依赖注入

    开源项目的依赖注入 依赖注入概念 依赖注入(DI:Dependency Injection): 依赖注入方式: B...

  • 资料收集

    依赖注入 AngularJs依赖注入的研究 (已读) 依赖注入(已读)

  • Dagger2常用注解诠释

    依赖注入 控制反转(IoC)与依赖注入(DI)浅谈依赖注入理解依赖注入(IOC)和学习Unity Gradle配置...

  • Day62 Spring 依赖注入源码解析

    手动注入自动注入 依赖注入,set注入,构造注入 依赖注入: Key依据 byType byName constr...

  • Dagger2 源码分析

    Dagger简单介绍 Dagger2涉及到依赖注入,有关依赖注入的请到理解依赖注入 通过注解方式实现依赖注入分为两...

  • 依赖注入(转)

    依赖注入(转) 原文地址:依赖注入原理

  • Spring学习之依赖注入

    Spring学习之依赖注入 依赖注入的基本概念 依赖注入(Dependecy Injection),也称为IoC(...

  • 依赖注入及Dagger2框架简介

    依赖注入简介 在介绍Dagger框架之前我们先来看看依赖注入(Dependence Injection),依赖注入...

  • 浅谈依赖注入

    依赖注入是什么? 依赖注入的作用是什么? 依赖注入的应用场景? 如何实现依赖注入? 对于一个后端程序员来说,依赖注...

网友评论

      本文标题:Spring-DI(依赖注入)

      本文链接:https://www.haomeiwen.com/subject/juscnctx.html