2016-08-17 2 views
0

Ich habe eine Spring-Konfigurationsklasse, die ich aus der Eigenschaftendatei lesen und die Beans erstellen.Spring-Konfigurationsklasse, um Bean als Eigenschaft zu injizieren

import org.springframework.beans.factory.annotation.Value; 
    import org.springframework.context.annotation.Bean; 
    import org.springframework.context.annotation.Configuration; 
    import org.springframework.context.annotation.PropertySource; 

    @Configuration 
    @PropertySource("classpath:conf.properties") 
    public class ApplicationConfiguration { 

     @Value("${name}") 
     private String username; 

     @Value("${password}") 
     private String password; 

     @Value("${ethnicity}") 
     private String ethnicity; 

     @Bean 
      public Employee employee(){ 
      Employee emp = new Employee(); 
      ConfigParam configParam = new ConfigParam(); 
      configParam.setEthnicity(ethnicity); 
      emp.setConfigParam(configParam); 
      return emp; 
      } 
    } 

Innerhalb der XML-Datei

<property name="configParam"> 
     <bean class="com.test.config.ConfigParam"> 
      <property name="ethnicity" value="indian" /> 
     </bean> 
    </property> 

ich in der Lage bin, die username und password Eigenschaften festlegen, aber nicht in der Lage das configParam Attribut employee zu setzen, da wir die ConfigParam und seine ein bean injizieren müssen. Bitte lassen Sie mich wissen, wie man eine Bohne in die employee Methode einspritzt.

+0

Wo wird die 'ConfigParam' Bean definiert? Normalerweise würden Sie es als Parameter der 'employee()' Methode hinzufügen, aber ich kann das nicht sehen, also nicht sicher, ob das die richtige Lösung ist. –

+0

Was funktioniert nicht? Scheint, dass Sie Ihre ethnische Zugehörigkeit zu ConfigParam und ConfigParam auf Ihre Mitarbeiter-Bean festlegen. Was willst du noch? Sie könnten ConfigParam als Bean erstellen und natürlich direkt dort die Ethnizität injizieren, aber das Endergebnis wäre wahrscheinlich das gleiche ... Wenn Sie nicht auf ConfigParam als Bean zugreifen müssen, warum sollten Sie es als einen erstellen? –

+0

Danke. Ich habe meinen Code aktualisiert. Ich überprüfe einfach, ob wir in der XML-Datei ein 'config' definieren können und injiziere die Bean innerhalb der' employee' Funktion in 'emp'. – zilcuanu

Antwort

0

Unter der Annahme, dass Ihr Spring-XML-Kontext, der die configParam Definition umfasst my-spring-context.xml genannt wird und in einem resources/spring Ordner, mit anderen Worten in einer Feder folder in Ihrem Classpath (Name und Ordner sind frei wählbar) gefunden:

Machen Sie Ihre ApplicationConfiguration Konfigurationsklasse bewusst, dass XML-Kontext-Datei durch die @ImportResource Anmerkung mit:

@Configuration 
@ImportResource("classpath:spring/my-spring-context.xml") 
@PropertySource("classpath:conf.properties") 
public class ApplicationConfiguration { 
//... 
} 

Dann in Ihrer employee Methode abhängigkeits injiziert die XML-Bohne wie üblich . Wenn Sie nach Name und nicht nach Typ injizieren möchten, können Sie die @Qualifier("myBeanName") direkt vor der configParam Argumentdefinition hinzufügen.

@Bean 
    @Autowired 
    public Employee employee(ConfigParam configParam){ 
    Employee emp = new Employee(); 
    configParam.setEthnicity(ethnicity); 
    emp.setConfigParam(configParam); 
    return emp; 
    } 
Verwandte Themen