@Configuration
Ek açıklamalı bir sınıf oluşturun :
@Configuration
public class MyApplicationContext {
}
Her bir <bean>
etiket için aşağıdakilerle açıklanmış bir yöntem oluşturun @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
}
}
İçe beanFromSomewhereElse
aktarmak için tanımını içe aktarmamız gerekiyor. Bir XML'de tanımlanabilir ve biz kullanacağız @ImportResource
:
@ImportResource("another-application-context.xml")
@Configuration
public class MyApplicationContext {
...
}
Fasulye başka bir @Configuration
sınıfta tanımlanmışsa @Import
ek açıklamayı kullanabiliriz :
@Import(OtherConfiguration.class)
@Configuration
public class MyApplicationContext {
...
}
Diğer XML'leri veya @Configuration
sınıfları içe aktardıktan sonra , @Configuration
sınıfa özel bir üye bildirerek, kendi bağlamımızda bildirdikleri çekirdekleri aşağıdaki gibi kullanabiliriz:
@Autowired
@Qualifier(value = "beanFromSomewhereElse")
private final StrangeBean beanFromSomewhereElse;
Veya doğrudan bu bağlıdır fasulye tanımlayan yöntemde parametre olarak kullanmak beanFromSomewhereElse
kullanarak @Qualifier
, aşağıdaki gibi:
@Bean(name = "anotherBean")
public AnotherClass getAnotherClass(@Qualifier (value = "beanFromSomewhereElse") final StrangeBean beanFromSomewhereElse) {
return new AnotherClassImpl(getSomeClass(), beanFromSomewhereElse);
}
Özelliklerin içe aktarılması, fasulyeyi başka bir xml veya @Configuration
sınıftan içe aktarmaya çok benzer . Kullanmak yerine aşağıdaki özellikleri @Qualifier
kullanacağız @Value
:
@Autowired
@Value("${some.interesting.property}")
private final String someInterestingProperty;
Bu, SpEL ifadeleri ile de kullanılabilir .
Spring'in bu tür sınıfları fasulye kapları olarak ele almasına izin vermek için, bu etiketi bağlama koyarak bunu ana XML'imizde işaretlememiz gerekir:
<context:annotation-config/>
Artık, @Configuration
basit bir fasulye oluşturduğunuz gibi sınıfları içe aktarabilirsiniz :
<bean class="some.package.MyApplicationContext"/>
Yaylı XML'lerden tamamen kaçınmanın yolları vardır, ancak bunlar bu yanıtın kapsamında değildir. Cevabımı dayandırdığım blog yazımda bu seçeneklerden birini öğrenebilirsiniz .
Temel olarak, gördüğüm birkaç avantaj nedeniyle, bu fasulye bildirim yöntemini XML kullanmaktan çok daha rahat buluyorum: