Soru BeanNameAware ve BeanFactoryAware


BeanNameAware ve BeanFactoryAware kullanımı nedir? İlkbaharda çalışıyordum ve bu iki arayüze rastladım. Onları yönlendirdim ama işe yarar bir şey olmadı. Lütfen BeanNameAware ve BeanFactoryAware arayüzlerinin işlevselliğinin ne olduğunu ve bunları ne zaman kullanacağınızı söyleyin?


18
2017-10-11 18:31


Menşei




Cevaplar:


xxxAware arayüz, Bahar çerçevesinde kullanılan yaygın bir modeldir. Yay ile yönetilen bir fasülyeye bir obje verilebilmesi için genellikle kullanılır (arayüzler aracılığıyla). setXxx Spring bootstrap zamanında.

Springs belgeleri bunun hakkında diyor Aware bahsettiğiniz ikiye süper bir arayüz olan arayüz:

Bir fasülyenin belirli bir çerçeve nesnesinin Spring konteyneri tarafından geri çağırma tarzı bir yöntemle bildirilmeye uygun olduğunu belirten işaretleyici süper karakter.

Sotirious'ın işaret ettiği gibi, Aware Arabirim dinleyici, geri arama veya gözlemci tasarım kalıplarının hissine sahiptir.

Kullanım şöyle görünecekti:

@Component
public MyBean implements BeanFactoryAware {
    private BeanFactory beanFactory;

    @Override
    public void setBeanFactory(final BeanFactory beanFactory) {
        this.beanFactory = beanFactory;
    }

    public void myMethod() {
        //I can now use beanFactory here
    }
}

Önyükleme sırasında, Spring her bir fasülyeyi uygulayacak olup olmadığını belirlemek için her fasulyeyi inceleyecektir. xxxAware arabirimleri. Biri bulunduğunda, istenen bilgi parçasını sağlayarak arabirim yöntemini çağırır. Yukarıdaki örnekte, Bahar çağrıları MyBean#setBeanFactory onun sağlanması BeanFactory.

Elbette, birçok durumda, bu arayüzleri kullanmak tamamen gerekli değildir. Örneğin, ApplicationContextAware arayüz sadece tarafından engellenebilir @Autowiredbir ApplicationContext bir bakla içine.

@Component
public class MyOtherBean {
    @Autowired
    private ApplicationContext applicationContext;

    public void someMethod() {
        //I can use the ApplicationContext here.
    }
}

25
2017-10-11 18:40



Cevabınızdaki anahtar kelime dinleyicisine atınız. - Sotirios Delimanolis
Bu 'beanFactory.getBean ("name")' kullanarak bir fasulye almak için 'beanFactory' kullanabiliriz anlamına mı geliyor? - Kanwaljeet Singh
@KanwaljeetSingh Bunun anlamı şudur ki BeanFactory. Kullanabileceğiniz herhangi bir yöntemi arayabilirsiniz. BeanFactory, dahil olmak üzere getBean. - nicholas.hauschild
bir Aware nesne bir Observer, Listener, Callback bazı olaylar için. Cevabınız harika, daha fazla anahtar kelime bulmak daha kolay olacaktır. +1 - Sotirios Delimanolis
@ nicholas.hauschild Kullanırsak getBean Bu bağımlılık enjeksiyonunun tüm amacına meydan vermiyor. Tüm bağımlılıkları enjekte etmek için fasulye xml dosyasını kullanmamalıyız MyBean. Bunu kullanabileceğimiz başka bir şey var mı? - Kanwaljeet Singh


BeanNameAware nesneyi fasulye adından haberdar eder. En iyi ön açıklama yapılandırma yayında (2.x) kullanılır. Fasulyeyi bir yer belirleyicisinden ismiyle anlayabilirsiniz.
 BeanFactoryAware, bu fasülyeyi oluşturan fasülyeye erişmesini sağlar. Bunun yararı için, belgeleri kontrol etmelisiniz: http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/beans/factory/BeanFactoryAware.html


0
2017-10-11 18:44





BeanFactoryAware arabirimi, bir ApplicationContext'in başlatılması sırasında kullanılır. İlklendirilmeden önce fasülyelerin dokumasını özelleştirmek için İlkbahar 2'de kullanılmıştır. Ek olarak, yükleme zamanında (LTW) nokta kesimlerini ilave etmek için örnek verilebilir. DAO'ların otojenik bulma yöntemleri için. Başka bir kullanım, test için hızlandırılmış testlerin hızlandırılması, testlerin hızlandırılmasıdır (tembel başlatma daha iyi bir uygulama olacaktır).

Ayrıca bakınız http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-beanfactory referans için.


0
2017-10-11 18:53