2017-02-22 17 views
2

В основе конфигурационного файла боб контекста XML, если я хочу передать боб как собственность, я хотел бы использовать:Как обратиться к другому боба как свойство в аннотаций на основе файла конфигурации

<bean class="com.example.Example" id="someId"> 
    <property name="someProp" refer="anotherBean"/> 
</bean> 
<bean class="com.example.AnotherBean" id="anotherBean"> 
</bean> 

So Example фасоль будет использовать anotherBean как свою собственность

Таким образом, в концепции аннотаций на основе конфигурации Java файла:

@Configuration 
class GlobalConfiguration { 
    @Bean 
    public Example createExample(){ 
     return; 
     //here how should I refer to the bean below? 
    } 

    @Bean 
    public AnotherBean createAnotherBean(){ 
     return new AnotherBean(); 
    } 
} 

ответ

6

Вот первое решение, белый если у вас есть оба определения бобов в одном классе @Configuration.

@Configuration 
class GlobalConfiguration { 
    @Bean 
    public Example createExample(){ 
     final Example example = new Example(); 
     example.setSomeProp(createAnotherBean()); 
     return example; 
    } 

    @Bean 
    public AnotherBean createAnotherBean(){ 
     return new AnotherBean(); 
    } 
} 

Вторая возможность заключается в том, чтобы использовать, как показано ниже автоматическое связывание:

@Configuration 
    class GlobalConfiguration { 
     @Bean 
     @Autowired 
     public Example createExample(AnotherBean anotherBean){ 
      final Example example = new Example(); 
      example.setSomeProp(anotherBean); 
      return example; 
     } 

     @Bean 
     public AnotherBean createAnotherBean(){ 
      return new AnotherBean(); 
     } 
    } 

Третьей возможность заключается в том, чтобы разделить эти заявления между двумя различных @Configuration классами и использовать автоматическое связывание.

@Configuration 
class FirstConfiguration { 

    @Bean 
    public AnotherBean createAnotherBean(){ 
     return new AnotherBean(); 
    } 
} 

@Configuration 
class SecondConfiguration { 

    @Autowired 
    private AnotherBean anotherBean; 

    @Bean 
    public Example createExample(){ 
     final Example example = new Example(); 
     example.setSomeProp(anotherBean); 
     return example; 
    } 
} 
+0

Вы можете также добавить '@ Autowired'annotation (с, возможно,' @ Qualifier') в определении класса Примера фасоли, если это возможно, и пропустить сеттер в бобе конкретизации. –

+1

спасибо @JeremyGrand, я только проверил второе предложенное вами решение, так как оно аккуратно и красиво. Это работает, второе решение, спасибо. – cinqS