📜  Spring – 通过 Setter 注入来注入对象

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

Spring – 通过 Setter 注入来注入对象

Spring IoC(控制反转)容器是 Spring Framework 的核心。它创建对象,配置和组装它们的依赖关系,管理它们的整个生命周期。容器使用依赖注入(DI)来管理组成应用程序的组件。它从配置文件 (XML) 或Java代码或Java注释和Java POJO 类中获取有关对象的信息。这些对象称为 Bean。由于Java对象及其生命周期的控制不是由开发人员完成的,因此称为控制反转。以下是 Spring IoC 的一些主要特性,

  • 为我们创建对象,
  • 管理我们的对象,
  • 帮助我们的应用程序可配置,
  • 管理依赖项

Spring 依赖注入

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

  • Setter 依赖注入 (SDI)
  • 构造函数依赖注入 (CDI)

二传手注入

Setter Injection 是两种依赖注入方法中更简单的一种。在此,依赖注入将在 setter 和/或 getter 方法的帮助下注入。现在要在 bean 中将 Dependency Injection 设置为 Setter Injection,它是通过 bean-configuration 文件完成的。为此,要使用 Setter Injection 设置的属性在 bean-config 文件中的标记下声明。

因此,在本文中,让我们学习如何使用 Spring 通过 Setter Injection 将我们的依赖项注入到我们的对象值中。对象是面向对象编程的基本单元,代表现实生活中的实体。所以通常在Java中,我们使用new关键字创建一个类的对象。

Test t = new Test();
// creating object of class Test
// t is the object

实现:假设我们有一个名为“Student”的类,并且在该类中,我们想要注入另一个名为“MathCheat”的类的对象。并且在名为“cheat()”的类中也存在一种类似的方法。

示例 1:

Java
// Java Program to Illustrate Student File
 
// Class
public class Student {
 
    // Attributes
    private int id;
    private MathCheat mathCheat;
 
    // Method
    public void cheating()
    {
        System.out.println("My ID is: " + id);
        mathCheat.mathCheating();
    }
}


Java
// Java Program to Illustrate MathCheat File
 
// Class
public class MathCheat {
 
    // Method
    public void mathCheating()
    {
        // Print statement
        System.out.println(
            "And I Have Stated Math Cheating");
    }
}


Java
// Java Program to Illustrate Student File
 
// Class
public class Student {
 
    // Attributes
    private int id;
    private MathCheat mathCheat;
 
    // Setter
    public void setId(int id) { this.id = id; }
 
    // Setter
    public void setMathCheat(MathCheat mathCheat)
    {
        this.mathCheat = mathCheat;
    }
 
    // Method
    public void cheating()
    {
 
        // Print statement
        System.out.println("My ID is: " + id);
       
        mathCheat.mathCheating();
    }
}


XML


 
    
        
        
            
        
    
 


Java
// Java Program to Illustrate Main File
// Implementing Spring IoC
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
// Main class
public class Main {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Using ApplicationContext to
        // Implementing Spring IoC
        ApplicationContext context
            = new ClassPathXmlApplicationContext(
                "beans.xml");
 
        // Getting the bean student
        Student student
            = context.getBean("student", Student.class);
 
        // Calling the method
        student.cheating();
    }
}


XML


     
    
 
    
         
         
    
 


示例 2:

Java

// Java Program to Illustrate MathCheat File
 
// Class
public class MathCheat {
 
    // Method
    public void mathCheating()
    {
        // Print statement
        System.out.println(
            "And I Have Stated Math Cheating");
    }
}

示例 1:

Java

// Java Program to Illustrate Student File
 
// Class
public class Student {
 
    // Attributes
    private int id;
    private MathCheat mathCheat;
 
    // Setter
    public void setId(int id) { this.id = id; }
 
    // Setter
    public void setMathCheat(MathCheat mathCheat)
    {
        this.mathCheat = mathCheat;
    }
 
    // Method
    public void cheating()
    {
 
        // Print statement
        System.out.println("My ID is: " + id);
       
        mathCheat.mathCheating();
    }
}

现在让我们在 beans.xml 文件中创建一个 Student Bean,在 bean 中,您必须在 标记中添加属性名称及其对应值,如下所示

语法:标准



  
  

但是这里我们注入的是对象,而不是像我们在这篇文章中通过 Setter 注入注入字面量值字面量所做的那样。所以对于这个例子,我们可以这样写


      
      
        
      

您可以看到我们如何在 Student bean 中创建 MathCheat 类的 bean。下面是beans.xml文件的完整代码

XML



 
    
        
        
            
        
    
 

因此,为了测试这些东西,让我们创建一个 main 方法并在 Student 类中调用 cheating() 方法。下面是 Main 的代码。 Java文件。

例子

Java

// Java Program to Illustrate Main File
// Implementing Spring IoC
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
// Main class
public class Main {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Using ApplicationContext to
        // Implementing Spring IoC
        ApplicationContext context
            = new ClassPathXmlApplicationContext(
                "beans.xml");
 
        // Getting the bean student
        Student student
            = context.getBean("student", Student.class);
 
        // Calling the method
        student.cheating();
    }
}

输出:

My ID is: 101
And I Have Stated Math Cheating

另一种方法(正确方法)

所以还有另一种方法可以在 beans.xml 文件中创建 MathCheat 类的 bean。所以你可以使用“ ref ”来写这样的东西。




    
    

下面是beans.xml文件的完整代码。

XML



     
    
 
    
         
         
    
 

因此,无论何时您要运行您的应用程序,您都会得到相同的输出。