English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Exemplo de injeção de dependências por construtor

Podemos injetar dependências através do construtor. <bean>do <constructor-arg>Elementos filhos são usados para injeção de construtores. Aqui, vamos injetar

Valores originais e baseados em strings Objetos dependentes (contendo objetos) Valores de conjunto

Injeção de valores originais e baseados em strings

Vamos ver alguns exemplos simples de injeção de valores originais e baseados em strings. Aqui, criamos três arquivos:

Employee.java applicationContext.xml Test.java

Employee.java

Esta é uma classe simples, contendo dois campos id e name. Esta classe possui quatro construtores e um método.

package com.w;3codebox;
public class Employee {
private int id;
private String name;
public Employee() { System.out.println("def cons"); }
public Employee(int id) { this.id = id; }
public Employee(String name) { this.name = name; }
public Employee(int id, String name) {
    this.id = id;
    this.name = name;
}
void show(){
    System.out.println(id+" "+name);
}
}


applicationContext.xml

Nós fornecemos informações a partir deste arquivo ao Bean. constructor-O elemento arg chama o construtor. Neste caso, será chamado o construtor parametrizado do tipo int. Constructor-A propriedade value do elemento arg atribui o valor especificado. A propriedade type especifica que será chamado o construtor de parâmetro int.

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="e" class="com.w3codebox.Employee">
<constructor-arg valor="10" type="int"></constructor-arg>
</bean>
</beans>

Test.java

Esta classe obtém o Bean a partir do arquivo applicationContext.xml e chama o método show.

package com.w;3codebox;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
public class Test {
    public static void main(String[] args) {
        
        Resource r = new ClassPathResource("applicationContext.xml");
        BeanFactory factory = new XmlBeanFactory(r);
        
        Employee s = (Employee)factory.getBean("e");
        s.show();
        
    }
}

Saída: 10Vazio


Injeção de valores baseados em strings

Se você não especificar a propriedade type no elemento arg do construtor, o construtor de tipo string será chamado automaticamente.

....
<bean id="e" class="com.w3codebox.Employee">
<constructor-arg valor="10></constructor-arg>
</bean>
....

Se alterar o elemento bean conforme mencionado acima, será chamado o construtor de parâmetro de string e a saída será 0 10。

Saída: 0 10


Você também pode passar strings da seguinte forma:

....
<bean id="e" class="com.w3codebox.Employee">
<constructor-arg valor="Sonoo"></constructor-arg>
</bean>
....

Saída: 0 Sonoo


Você pode passar números inteiros e strings da seguinte forma:

....
<bean id="e" class="com.w3codebox.Employee">
<constructor-arg valor="10" tipo="int" "</constructor-arg>
<constructor-arg valor="Sonoo"></constructor-arg>
</bean>
....

Saída: 10 Sonoo