Buat @Configurationkelas 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 beanFromSomewhereElsekita 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 @Configurationkelas lain, kita dapat menggunakan @Importanotasi:
@Import(OtherConfiguration.class)
@Configuration
public class MyApplicationContext {
...
}
Setelah kita mengimpor XML atau @Configurationkelas lain, kita dapat menggunakan kacang yang dideklarasikan dalam konteks kita dengan mendeklarasikan anggota pribadi ke @Configurationkelas 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 beanFromSomewhereElsemenggunakan @Qualifiersebagai 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 @Configurationkelas lain. Alih-alih menggunakan, @Qualifierkami akan menggunakan @Valuedengan 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 @Configurationkelas 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: