Utwórz @Configuration
zajęcia z adnotacjami:
@Configuration
public class MyApplicationContext {
}
Dla każdego <bean>
tagu utwórz metodę z adnotacją @Bean
:
@Configuration
public class MyApplicationContext {
@Bean(name = "someBean")
public SomeClass getSomeClass() {
return new SomeClassImpl(someInterestingProperty); // We still need to inject someInterestingProperty
}
@Bean(name = "anotherBean")
public AnotherClass getAnotherClass() {
return new AnotherClassImpl(getSomeClass(), beanFromSomewhereElse); // We still need to inject beanFromSomewhereElse
}
}
Aby zaimportować beanFromSomewhereElse
, musimy zaimportować jego definicję. Można go zdefiniować w XML i użyjemy @ImportResource
:
@ImportResource("another-application-context.xml")
@Configuration
public class MyApplicationContext {
...
}
Jeśli fasola jest zdefiniowana w innej @Configuration
klasie, możemy użyć @Import
adnotacji:
@Import(OtherConfiguration.class)
@Configuration
public class MyApplicationContext {
...
}
Po zaimportowaniu innych plików XML lub @Configuration
klas możemy użyć fasoli, które zadeklarowały w naszym kontekście, deklarując prywatny element członkowski w @Configuration
klasie w następujący sposób:
@Autowired
@Qualifier(value = "beanFromSomewhereElse")
private final StrangeBean beanFromSomewhereElse;
Lub użyj go bezpośrednio jako parametru w metodzie, która definiuje fasolę, która zależy od tego, beanFromSomewhereElse
używając @Qualifier
w następujący sposób:
@Bean(name = "anotherBean")
public AnotherClass getAnotherClass(@Qualifier (value = "beanFromSomewhereElse") final StrangeBean beanFromSomewhereElse) {
return new AnotherClassImpl(getSomeClass(), beanFromSomewhereElse);
}
Importowanie właściwości jest bardzo podobne do importowania komponentu bean z innego pliku XML lub @Configuration
klasy. Zamiast używać @Qualifier
, użyjemy @Value
z właściwościami w następujący sposób:
@Autowired
@Value("${some.interesting.property}")
private final String someInterestingProperty;
Można tego używać również z wyrażeniami SpEL .
Aby umożliwić Springowi traktowanie takich klas jak pojemników na ziarna, musimy zaznaczyć to w naszym głównym pliku XML, umieszczając ten tag w kontekście:
<context:annotation-config/>
Możesz teraz importować @Configuration
klasy dokładnie tak samo, jak utworzyłbyś prosty bean:
<bean class="some.package.MyApplicationContext"/>
Istnieją sposoby na całkowite uniknięcie sprężynowych plików XML, ale nie są one objęte zakresem tej odpowiedzi. Możesz dowiedzieć się o jednej z tych opcji w moim wpisie na blogu, na którym opieram swoją odpowiedź.
Zasadniczo uważam, że ta metoda deklarowania fasoli jest znacznie wygodniejsza niż używanie plików XML z powodu kilku zalet, które widzę:
@Component
@Service
lub inne takie adnotacje, zostanie automatycznie przekształcona w fasolę (ale to nie było głównym tematem tego pytania)