20 Şubat 2020 Perşembe

SpringContext @Autowired Anotasyonu

Giriş
Şu satırı dahil ederiz.
import org.springframework.beans.factory.annotation.Autowired;
Açıklaması şöyle.
@Autowired is part of spring-beans-XXX.jar. spring-boot-starter will have spring-beans as trasnsitive dependancy.
Açıklaması şöyle
@Autowired is a spring propriety annotation that inject a resource by type, i.e. by corresponding implemented class (annotated with @Component) to afield annotated with @Autowired. Fundamentally, @Autowired is about type-driven injection.
Şöyle yaparız
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>your release version</version>
</dependency>
Açıklaması şöyle.
To enable @Autowired, you have to register ‘AutowiredAnnotationBeanPostProcessor‘, and you can do it in two ways :

1. Include <context:annotation-config />
2. Include AutowiredAnnotationBeanPostProcessor
Eğer Autowired başarısız olursa şuna benzer bir exception fırlatılır.
Injection of autowired dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: Could not autowire 
field: ...
Eğer Spring ApplicationContext ile ayağa kalkarsa @Autowired anotasyonları çalıştırılır.

Örnek
Generic bean'leri kullanmak için şu iki yöntemden birini yaparız.
class MyBean {

  @Autowired
  private Dao<Entity> dao;

}

class MyBean<T> {

  @Autowired
  private Dao<T> dao;

}
required Alanı
Bu alanın varlığını ilk defa burada gördüm. Normalde istenilen bean yoksa Spring exception fırlatır. Alanın değeri false ise istenilen bean yoksa bile exception fırlatmaz.

Örnek
Şöyle yaparız.
public class MyClass {
  ...
  @Autowired(required=false) //Simply never gets called if missing
  public void setSomeProp(String val){
  }
}




Hiç yorum yok:

Yorum Gönder