2017-02-16 3 views
1

У меня есть XML-файл бобаSpring автоматического связывания при использовании конфигурации класса

<?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:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
    <context:annotation-config/> 
    <bean id="helloWorld" class="com.a.b.HelloWorld"> 
     <property name="attr1" value="Attr1 from XML"></property> 
    </bean> 
    <bean id="helloWorld2" class="com.a.b.HelloWorld2"> 
     <property name="attr2" value="Attr2 from XML"></property> 
    </bean> 
</beans> 

И я использовать конструктор автоматического связывания, как этот

public class HelloWorld2{ 
     private String attr2; 
     public void setAttr2(String message){ 
      this.attr2 = message; 
     } 

     public void getAttr2(){ 
      System.out.println("getAttr2 == " + attr2); 
     } 


    } 

public class HelloWorld{ 
     private String attr1; 
     private HelloWorld2 helloWorld2;  
     public HelloWorld(){ 

     } 
     @Autowired 
     public HelloWorld(HelloWorld2 helloWorld2){ 
      System.out.println("hhh"); 
      this.helloWorld2 = helloWorld2; 
     } 


    public void setAttr1(String message){ 
      this.attr1 = message; 
     } 

     public void getAttr1(){ 
      System.out.println("getAttr1 == " + attr1); 
     } 
     public void getH(){ 
      helloWorld2.getAttr2(); 
     } 
    } 

И автоматического связывания работает нормально.

Теперь я хочу переместить мои компоненты в класс «Конфигурация». Но тогда как перемещать код так, как работает автомастер?

Я попытался, как это, но он не работает

@Configuration 
public class Config { 
    @Bean 
    public HelloWorld helloWorld(){ 
     HelloWorld a = new HelloWorld(); 
     a.setAttr1("Demo Attr1"); 
     return a; 

    } 

    @Bean 
    public HelloWorld2 helloWorld2(){ 
     HelloWorld2 a = new HelloWorld2(); 
     a.setAttr2("Demo Attr2"); 
     return a;    
    } 
} 
+1

Возможный дубликат [Конвертирование файла весной XML в spring @Configuration class] (http://stackoverflow.com/questions/2 4014919/conversion-spring-xml-file-to-spring-configuration-class) – James

ответ

3

Я думаю, что вы хотите достичь, это инъекция HelloWorld2, например в метод, который создает HelloWorld@Bean?

Это следует сделать это:

@Configuration 
public class Config { 
    @Bean 
    public HelloWorld helloWorld(HelloWorld2 helloWorld2){ 
     HelloWorld a = new HelloWorld(helloWorld2); 
     a.setAttr1("Demo Attr1"); 
     return a; 

    } 

    @Bean 
    public HelloWorld2 helloWorld2(){ 
     HelloWorld2 a = new HelloWorld2(); 
     a.setAttr2("Demo Attr2"); 
     return a;    
    } 
} 

Это может быть дублирования этих вопросов:

+0

Он работает с небольшими изменениями. Мне также необходимо изменить HelloWorld a = new HelloWorld(); HelloWorld a = новый HelloWorld (helloWorld2); Правильно ли это? –

+0

Да, хорошее место. – James

+0

Но теперь этот код работает, даже когда я удалил @Autowired из HelloWorld Constructor и O/p obj1.getH() дает мне Demo Attr2. Как это происходит? Я имею в виду, как HelloWorld получает экземпляр HelloWorld2 без autowiring? –

Смежные вопросы