📜  Spring – 通过 Setter 方法进行依赖注入

📅  最后修改于: 2022-05-13 01:55:22.596000             🧑  作者: Mango

Spring – 通过 Setter 方法进行依赖注入

依赖注入是Spring IOC(Inversion of Control)提供的主要功能。 Spring-Core 模块负责通过 Constructor 或 Setter 方法注入依赖项。控制反转的设计原则强调保持Java类相互独立,容器将它们从对象创建和维护中解放出来。这些由 Spring 管理的类必须遵守 Java-Bean 的标准定义。 Spring 中的依赖注入还确保了类之间的松散耦合。

需要依赖注入

假设类一需要类二的对象来实例化或操作一个方法,则称类一依赖于类二。现在,虽然依赖另一个模块看起来不错,但在现实世界中,这可能会导致很多问题,包括系统故障。因此,需要避免这种依赖关系。 Spring IOC 使用 Dependency Injection 解决此类依赖关系,这使得代码更易于测试和重用。通过为通用功能定义接口可以实现类之间的松散耦合,并且注入器将实例化所需实现的对象。实例化对象的任务由容器根据开发者指定的配置完成。

Spring依赖注入的类型

Spring 依赖注入有两种类型。他们是:

  • Setter Dependency Injection (SDI):这是两种 DI 方法中较简单的一种。在此,DI 将在 setter 和/或 getter 方法的帮助下注入。现在要将 DI 设置为 bean 中的 SDI,这是通过 bean-configuration 文件完成的。为此,要使用 SDI 设置的属性在 bean-config 文件中的 标记下声明。
  • 构造函数依赖注入(CDI):在这种情况下,DI将在构造函数的帮助下被注入。现在要将 DI 设置为 bean 中的 CDI,这是通过 bean-configuration 文件完成的。为此,要使用 CDI 设置的属性在 bean-config 文件中的 标记下声明。

通过 Setter 方法进行依赖注入和示例

setter注入是一种依赖注入,spring框架使用setter方法注入依赖对象。调用首先转到无参数构造函数,然后转到 setter 方法。它不会创建任何新的 bean 实例。让我们看一个通过 setter 方法注入依赖的示例。

  1. 员工。 Java (POJO 类)
  2. 配置文件
  3. 主要的。Java

1. 员工。Java

Java
package com.spring;
  
public class Student {
    
    private String studentName;
    private String studentCourse;
  
    public String getStudentName() 
    { 
      return studentName;
    }
  
    public void setStudentName(String studentName)
    {
        this.studentName = studentName;
    }
  
    public String getStudentCourse()
    {
        return studentCourse;
    }
  
    public void setStudentCourse(String studentCourse)
    {
        this.studentCourse = studentCourse;
    }
  
    @Override public String toString()
    {
        return "Student{"
            + "studentName=" + studentName + 
             ", studentCourse=" + studentCourse + '}';
    }
}


XML


    
     
   
       
                John  
       
  
       
                Spring Framework  
          
  
    
    


Java
package com.spring;
  
import java.io.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationCotenxt;
  
public class GFG {
    public static void main(String[] args)
    {
        ApplicationContext context = new ClassPathXmlApplicationCotenxt("config.xml");
        Student student= (Student)context.getBean("stud");
        System.out.println(student);
    }
}


2.config.xml文件

XML



    
     
   
       
                John  
       
  
       
                Spring Framework  
          
  
    
    

3.主要。Java

Java

package com.spring;
  
import java.io.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationCotenxt;
  
public class GFG {
    public static void main(String[] args)
    {
        ApplicationContext context = new ClassPathXmlApplicationCotenxt("config.xml");
        Student student= (Student)context.getBean("stud");
        System.out.println(student);
    }
}

输出:

Student{ studentName= John  , studentCourse= Spring Framework }