📜  Spring – 带 Map 的 Setter 注入

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

Spring – 带 Map 的 Setter 注入

Spring 是一个开源轻量级框架,它允许Java EE 开发人员构建简单、可靠和可扩展的企业应用程序。这个框架是根据依赖注入的概念设计的,它专注于提供各种管理业务对象的方法。

依赖注入

依赖注入 (DI)是对象定义它们的依赖关系的过程,即它们使用的其他对象。它仅通过构造函数参数、工厂方法的参数或在对象实例被构造或从工厂方法返回后设置的属性发生。然后容器负责在创建 bean 时注入这些依赖项。这个过程基本上是逆过程,因此也称为控制反转 (IoC)。

依赖注入有两种方式,

1) 基于构造函数的依赖注入——这是通过容器调用具有多个参数的构造函数来完成的,每个参数代表一个依赖项。我们需要使用 标签的子元素进行构造函数注入。

XML

  
  


XML

  
  


XML

        
        
            
                
                
            
        


Java
package com.geeks.beans;
  
import java.util.Map;
  
public class InfoBean {
      
    private String name;
    private String msg;
    private Map frameworks;
      
      
    public Map getFrameworks() {
        return frameworks;
    }
    public void setFrameworks(Map frameworks) {
        this.frameworks = frameworks;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
      
    public void display() {
        System.out.println("Hi "+name+", "+msg);
        System.out.println("Framework Names: Description");
        for (Map.Entry entry : frameworks.entrySet())
            System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  
}


XML

  

  
    
        
        
        
            
                
                
                
            
        
    
  


Java
package com.geeks.test;
  
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
  
import com.geeks.beans.InfoBean;
  
public class InfoBeanTest {
  
    public static void main(String[] args) {
  
        ApplicationContext con = new ClassPathXmlApplicationContext("com/geeks/resources/applicationContext.xml");
        InfoBean infoBean = (InfoBean) con.getBean("info");
        infoBean.display();
    }
  
}


2) 基于 Setter 的依赖注入——这是通过容器在调用无参数构造函数或无参数静态工厂方法来实例化 bean 后对 bean 调用 setter 方法来完成的。我们需要使用 标签的 子元素进行 setter 注入。

XML


  
  

通过使用 标签的 setter 注入,我们可以根据我们的要求提供诸如 Strings、Primitives、Collections 等值。在这个例子中,我们将看到使用 Map 的 setter 注入。当我们使用地图时,我们需要使用标签来设置它的值。

XML


        
        
            
                
                
            
        

示例项目

我们将在 Eclipse 中创建一个简单的 Spring 应用程序,以在控制台中显示名称、欢迎消息和框架详细信息作为输出。

项目结构:

  • 创建一个新的Java项目——SpringSetterInjection。
  • 将所有必需的 Spring Jar 文件添加到项目中。
  • 创建一个 bean 类——InfoBean。 Java,定义这些属性的所有属性和getter/setter方法。
  • 为 bean 配置创建 XML 配置文件 - applicationContext.xml。
  • 创建 bean 测试类——InfoBeanTest。 Java,用于定义应用程序上下文容器并获取 bean 对象。
  • 运行应用程序以获取输出。

创建项目、bean 类和 XML 配置文件后,项目结构如下。

项目结构

项目结构

spring jar 文件可以从 Maven Repository 下载。

要创建的文件:

信息豆。Java:

Java

package com.geeks.beans;
  
import java.util.Map;
  
public class InfoBean {
      
    private String name;
    private String msg;
    private Map frameworks;
      
      
    public Map getFrameworks() {
        return frameworks;
    }
    public void setFrameworks(Map frameworks) {
        this.frameworks = frameworks;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
      
    public void display() {
        System.out.println("Hi "+name+", "+msg);
        System.out.println("Framework Names: Description");
        for (Map.Entry entry : frameworks.entrySet())
            System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  
}
  • 在 bean 类中,我们将属性“name”和“msg”定义为 String 类型,将“frameworks”定义为 Map。
  • 生成所有属性的 getter/setter 方法。
  • 定义一个方法——display(),打印属性的值。
  • 由于“框架”字段是一个类型映射,我们需要迭代映射以打印键值。
  • 因此,这里我们使用 for-each 循环来迭代“框架”并打印其中的值。

应用程序上下文.xml:

XML


  

  
    
        
        
        
            
                
                
                
            
        
    
  

  • 在 XML 文件中,我们需要包含配置的 bean XML 模式位置。
  • 我们使用 < property>标签内的标签来设置 Map 的属性值。

信息豆测试。Java:

Java

package com.geeks.test;
  
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
  
import com.geeks.beans.InfoBean;
  
public class InfoBeanTest {
  
    public static void main(String[] args) {
  
        ApplicationContext con = new ClassPathXmlApplicationContext("com/geeks/resources/applicationContext.xml");
        InfoBean infoBean = (InfoBean) con.getBean("info");
        infoBean.display();
    }
  
}

应用程序上下文容器创建 bean 对象,我们让该 bean 对象调用 display() 方法。

输出:

  • 将测试类作为Java项目运行。
  • Spring 容器将创建“InfoBean”对象并设置所有属性值并使 bean 对象对开发人员可用。
  • 使用 bean 对象,它调用 display() 方法并在控制台中打印以下输出。
输出

输出