Buat @Configuration
kelas beranotasi:
@Configuration
public class MyApplicationContext {
}
Untuk setiap <bean>
tag buat metode yang dianotasi dengan @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
}
}
Untuk mengimpor beanFromSomewhereElse
kita perlu mengimpor definisinya. Itu bisa didefinisikan dalam XML dan kita akan menggunakan @ImportResource
:
@ImportResource("another-application-context.xml")
@Configuration
public class MyApplicationContext {
...
}
Jika kacang didefinisikan di @Configuration
kelas lain, kita dapat menggunakan @Import
anotasi:
@Import(OtherConfiguration.class)
@Configuration
public class MyApplicationContext {
...
}
Setelah kita mengimpor XML atau @Configuration
kelas lain, kita dapat menggunakan kacang yang dideklarasikan dalam konteks kita dengan mendeklarasikan anggota pribadi ke @Configuration
kelas sebagai berikut:
@Autowired
@Qualifier(value = "beanFromSomewhereElse")
private final StrangeBean beanFromSomewhereElse;
Atau gunakan secara langsung sebagai parameter dalam metode yang mendefinisikan kacang yang bergantung padanya dengan beanFromSomewhereElse
menggunakan @Qualifier
sebagai berikut:
@Bean(name = "anotherBean")
public AnotherClass getAnotherClass(@Qualifier (value = "beanFromSomewhereElse") final StrangeBean beanFromSomewhereElse) {
return new AnotherClassImpl(getSomeClass(), beanFromSomewhereElse);
}
Mengimpor properti sangat mirip dengan mengimpor kacang dari xml atau @Configuration
kelas lain. Alih-alih menggunakan, @Qualifier
kami akan menggunakan @Value
dengan properti sebagai berikut:
@Autowired
@Value("${some.interesting.property}")
private final String someInterestingProperty;
Ini dapat digunakan dengan ekspresi SpEL juga.
Untuk mengizinkan spring memperlakukan kelas seperti wadah kacang, kita perlu menandai ini di xml utama kita dengan meletakkan tag ini dalam konteks:
<context:annotation-config/>
Anda sekarang dapat mengimpor @Configuration
kelas persis sama seperti Anda membuat kacang sederhana:
<bean class="some.package.MyApplicationContext"/>
Ada cara untuk menghindari XML pegas sama sekali tetapi mereka tidak termasuk dalam cakupan jawaban ini. Anda dapat menemukan salah satu opsi ini di posting blog saya yang menjadi dasar jawaban saya.
Pada dasarnya saya menemukan metode mendeklarasikan kacang jauh lebih nyaman daripada menggunakan XML karena beberapa keuntungan yang saya lihat:
Kerugiannya tidak banyak seperti yang saya lihat tetapi ada beberapa yang dapat saya pikirkan: