2016-08-31 11 views
11

Uczę się o Spring Framework, ale nie mogę zrozumieć, co dokładnie oznacza adnotacja @Configuration i które klasy powinny być opatrzone adnotacją. W dokumentach Spring Boot mówi się, że klasa Application powinna być klasą @Configuration.Dlaczego aplikacja Spring Boot Application musi mieć adnotację @Configuration?

Spring Boot faworyzuje konfigurację opartą na języku Java. Chociaż możliwe jest wywołanie funkcji SpringApplication.run() przy użyciu źródła XML, zwykle zalecamy, aby podstawowym źródłem była klasa @Configuration.

Próbując dowiedzieć się o @Configuration Uważam, że opisywanie klasę z @Configuration wskazuje, że klasa może być używany przez kontener IoC wiosny jako źródło definicji fasoli.

Jeśli tak, to w jaki sposób ta klasa aplikacji jest źródłem definicji fasoli?

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan 
public class App 
{ 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(App.class, args);  
    } 
} 

mam dość dużo rozumieć większość innych podstawowych pojęć dotyczących wiosny, ale nie mogę zrozumieć cel @Configuration lub klas, które powinny być @Configuration zajęcia? Czy ktoś może ci pomóc. Dzięki !!

Odpowiedz

18

Dobrze to zrozumiałeś.

@Configuration

@Configuration jest analogiem dla pliku XML. Klasy takie są źródłami definicji ziaren dzięki zdefiniowaniu metod z adnotacją @Bean.

@Configuration jest:

  • nie wymaga, jeśli już zdać uwagami klasę w parametrze sources podczas wywoływania metody SpringApplication.run(); Wymagane jest
  • wymagane , jeśli nie przekazujesz jawnie klasy z adnotacjami, ale znajduje się ona w pakiecie określonym w @ComponentScan adnotacji głównej klasy konfiguracji.

Dla czytelności, zajęcia, które są nawet wyraźnie przekazane jako sources może zresztą być opatrzone @Configuration - wystarczy pokazać intencje jaśniej.

Twoja aktualna klasa nie jest tak naprawdę źródłem definicji fasoli, ponieważ jej nie ma, ale gdybyś miała metody oznaczone adnotacjami, Spring zobaczyłaby je.

@EnableAutoConfiguratiom

Może być stosowany z lub bez @Configuration. Mówi Springowi, żeby ustawił podstawową infrastrukturę oceniając to, co masz w ścieżce klas. Odbywa się to poprzez wywołanie tzw. Klasy importu, która wywodzi się z wartości adnotacji , którą zawiera @EnableAutoConfiguration. Tylko jedna klasa powinna być opatrzona komentarzem pod numerem @EnableAutoConfiguration, a jej powielenie nie powoduje żadnych zmian.

Ta odpowiedź może również być pomocne w zrozumieniu procesu inicjalizacji Wiosna Boot: Which piece of code in Spring Boot actually registers dispatcher servlet for SpringMVC?

+0

Dzięki za szybką i jasną odpowiedź. Teraz ma to sens. Czy w tym przypadku ta adnotacja jest opcjonalna? W rzeczywistości widzę, że ta adnotacja jest nieco nadużywana, na przykład w Spring Security, klasa SecurityConfig jest również opisywana przy użyciu @Configuration, mimo że nie ma żadnych fasoli http://docs.spring.io/spring-security/site/ docs/3.2.x/guides/helloworld.html – varunkr

+1

Masz rację. Jest to opcjonalne, chyba że chcesz, aby był skanowany automatycznie (zobacz moją zaktualizowaną odpowiedź). Tak jest w przypadku SecurityConfig - opatrzono je adnotacją na wypadek automatycznego skanowania. –

+0

@ArtemNovikov Jak i kiedy rozważysz/dowiesz się, kiedy Twój wniosek będzie pełnym wiosennym uruchomieniem? – Jesse

6

Myślę, że głównym powodem, dlaczego Wiosna Boota @SpringBootApplication adnotacji automatycznie stosuje @Configuration jest umożliwienie, aby dodać definicje fasoli w tej samej klasie. Jednym z głównych celów Spring Boot jest umożliwienie szybkiego tworzenia aplikacji bez dodatkowych ruchów. Dzięki temu, że możesz dodawać definicje fasoli bezpośrednio do klasy aplikacji, nie musisz tworzyć dodatkowych klas, aby zachować konfigurację. Masz tylko 1 klasę i to wszystko.