Şimdi bizim beanlarımızı görüldüğü üzere biz eğer ki class ve interfaces'larımıza sahipsek otomatik olarak dependency injection ile süreci tamamlayıp bir instance oluşturabiliyoruz peki ya bunları dışarıdan aldığımız bir class ile olsa nasıl olacak ? Örneğin : AWS S3 client, ChatClient AI için ?? Buna mesela erişimin olabilmesi için tabi biz bunların interface ve classlarına sahip olmadığımız çin third party'den indirdiğimiz jar dosyaları olduğundan bunlarla ilgili beanları ancak @Bean annotationu ile oluşturabiliriz.
Ana mantık şudur : Third-party eğer ki bir class varsa bunu bizim Spring Frameworkte kullanmak için @Bean yapılır çünkü biz Third-party eklediğimiz classlara @Component annotationunu ekleyemeyeceğiiz için sadece @Bean ile configure edebiliriz.
Şimdi biz @Configuration ve @Bean annotationlarına birlikte bakalım. Örneğin biz BiologyTeacher için bir tane @Bean oluşturalım.
@Configuration ve @Bean yaklaşımı alternatif bir yöntemdir ve genellikle @Component ekleyemediğimiz sınıflar için kullanılır.
Yeni bir sınıf oluşturduk bunu third-party yerden geliyormuş gibi düşünün.
public class BiologyTeacher implements Teacher{
@Override
public String getName() {
return "Minter Biology";
}
}@Configuration
public class TeacherConfig {
@Bean
public Teacher biologyTeacher(){
return new BiologyTeacher();
}
}ConfigurationRestController.java
@RestController
public class ConfigurationRestController {
private final Teacher teacher;
@Autowired
public ConfigurationRestController(@Qualifier("biologyTeacher") Teacher teacher) {
this.teacher = teacher;
}
@RequestMapping(path = "/configuration", method = RequestMethod.GET)
public String getConfig() {
return teacher.getName();
}
}