2015-05-29 2 views
2

Вот мой текущий код.Весна - следует ли использовать @Bean или @Component?

Метод 1

@Configuration 
public class AppConfig { 

    @Bean 
    @Autowired(required = false) 
    public HttpClient createHttpClient() { 
     // do some connections configuration 
     return new HttpClient(); 
    } 

    @Bean 
    @Autowired 
    public NameClient nameClient(HttpClient httpClient, 
           @Value("${ServiceUrl:NotConfigured}") 
           String serviceUrl) { 
     return new NameClient(httpClient, serviceUrl); 
    } 

} 

И NameClient простой POJO выглядит следующим образом

public class NameClient { 
    private HttpClient client; 
    private String url; 

    public NameClient(HttpClient client, String url) { 
     this.client = client; 
     this.url = url; 
    } 

    // other methods 
} 

Вместо использования @Bean для настройки, я хотел следовать этой схеме:

Способ 2

@Configuration 
public class AppConfig { 

    @Bean 
    @Autowired(required = false) 
    public HttpClient createHttpClient() { 
    // do some connections configuration 
    return new HttpClient(); 
    } 
} 

и использовать функцию автоматического сканирования, чтобы получить боб

@Service //@Component will work too 
public class NameClient { 

    @Autowired 
    private HttpClient client; 

    @Value("${ServiceUrl:NotConfigured}") 
    private String url; 

    public NameClient() {} 

    // other methods 
} 

Почему первый метод используется/Preferred? В чем преимущество одного над другим? Я читал о различиях между аннотациями @Component и @Bean.

ответ

6

Они эквивалентны.

Обычно вы используете второй, когда вы владеете классом NameClient, и, таким образом, можете добавлять примечания Spring в свой исходный код.

Вы использовали бы первый, если у вас нет класса NameClient, и поэтому не можете аннотировать его соответствующими аннотациями Spring.

+0

это действительный пункт. Я не уверен, почему мы используем метод 1, хотя у нас есть код –

+1

. Другая причина может быть, если вы не хотите добавлять специальные примечания Spring, потому что этот код используется в других проектах, отличных от Spring. – dunni

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