📜  Spring – 通过构造函数注入注入字面量

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

Spring – 通过构造函数注入注入字面量

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

Spring IoC的主要特点如下:

  1. 为我们创建对象,
  2. 管理我们的对象,
  3. 帮助我们的应用程序可配置,
  4. 管理依赖项

Spring 依赖注入

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

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

构造函数注入

在构造函数注入中,依赖注入将在构造函数的帮助下注入。现在将依赖注入设置为bean中的构造函数依赖注入,它是通过bean配置文件完成的。为此,要使用 CDI 设置的属性在 bean-config 文件中的标记下声明。

在这里,我们将讨论如何使用 Spring 通过构造函数注入将我们的依赖项注入到我们的字面量中。 字面量中的Java是布尔、数字、字符或字符串数据的合成表示。它是在程序中表达特定值的一种媒介,比如一个名为''/count的整数变量在下面的语句中被赋值为一个整数值。

int x = 100; 
// Here 100 is a constant/literal

插图:

String s = "Hello";

实现:我们正在密谋我们在这篇文章中创建的通过字面量 Injection 注入字面值的相同示例。创建一个具有两个属性 id 和 studentName 的简单类 Student。为这两个属性创建 setter 方法和打印学生详细信息的简单方法。

A.档案:学生。Java

例子:

Java
// Java Program to Illustrate Student Class
 
// Class
public class Student {
 
    // Class data members
    private int id;
    private String studentName;
 
    // Getters and setters
    public void setId(int id) { this.id = id; }
    public void setStudentName(String studentName)
    {
        // This keyword refers to current instance itself
        this.studentName = studentName;
    }
 
    // Method
    public void displayInfo()
    {
        // Printing name and corresponding
        // roll number of Student
        System.out.println("Student Name is " + studentName
                           + " and Roll Number is " + id);
    }
}


XML


 
    
        
        
    
 
    
        
        
    
 


Java
// Importing required classes
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
// Main class
public class Exam {
   
    // Main driver method
    public static void main(String[] args) {
       
        // Implementing Spring IoC
        // using ApplicationContext 
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
 
        // Getting the bean studentAmiya
        Student amiya = context.getBean("studentAmiya", Student.class);
         
        // Calling the methods
        // inside main() method
        amiya.displayInfo();
 
        // Getting the bean studentAsish
        Student asish = context.getBean("studentAsish", Student.class);
        
        // Calling the methods
        asish.displayInfo();
    }
}



我们唯一需要更改的是 beans.xml 文件。现在让我们在 beans.xml 文件中创建一个学生 Bean,在 bean 中,您必须在 标记而不是 标记中添加属性的名称及其对应值,如下所示

语法:标准


    

让我们为这个项目提供一些插图,我们可以为此编写如下内容:

图 1-A:


  
  

同样,我们可以创建另一个 bean 并像这样放置值

图 1-B:


  
  

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

B.文件:beans.xml

例子:

XML



 
    
        
        
    
 
    
        
        
    
 


所以现在我们的两个豆子已经准备好了。现在让我们创建一个类并在该类中定义 main() 方法。假设我们创建了一个类名 Exam,并且我们在这个类中定义了 main() 方法。下面是考试代码。 Java类。代码中添加了注释以便更好地理解。

C.文件:考试。Java

例子:

Java

// Importing required classes
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
// Main class
public class Exam {
   
    // Main driver method
    public static void main(String[] args) {
       
        // Implementing Spring IoC
        // using ApplicationContext 
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
 
        // Getting the bean studentAmiya
        Student amiya = context.getBean("studentAmiya", Student.class);
         
        // Calling the methods
        // inside main() method
        amiya.displayInfo();
 
        // Getting the bean studentAsish
        Student asish = context.getBean("studentAsish", Student.class);
        
        // Calling the methods
        asish.displayInfo();
    }
}


输出:

Student Name is Amiya Rout and Roll Number is 101
Student Name is Asish Rout and Roll Number is 102