2015-01-21 18 views
10

Yay fasulyeleri tanımlamak için @ComponentScan ve @Component kullanıyorum. İstediğim şey bu fasulyelerden birini autowire-candidate=false olarak ilan etmektir.Ek açıklamaları kullanırken Spring bean autowire-candidate = "false" nasıl bildirilir?

Bu özellik, xml cinsinden bu özellik ile yapılabilir. Ek açıklamalarda eşdeğer yok mu?

Bunun nedeni, aynı arabirimin 2 uygulamasına sahip olduğum için ve @Qualifier kullanmak istemiyorum.

DÜZENLEME: @Primary öğesinin kullanımı geçerli bir çalışmadır, ancak otomatik telferadı adayı, kendi semantikleriyle yararlı bir özellik gibi görünüyor.

Teşekkür

+2

Tercih edilen öğeyi '@ Primary' ile belirtin. Bu şekilde bir "@ Qualifier" kullanmanıza gerek yok. –

+0

Yorum için teşekkürler. Evet, bu aslında sorunun üstesinden gelmeyi bulmuş olduğum bir yoldu, ama sadece nasıl ek açıklamalarda oto-akit adayının eşdeğerinin olmadığını merak ediyorum. –

+2

Spring reddedildi 'autowire-candidate = false' kavramına benziyor ve artık desteklenmiyor. Ek açıklamalarla hiçbir analog yoktur, bu yüzden 'Primary 'tek fark ettiğiniz şekilde olur. –

cevap

5

Bahar autowire-candidate=false kavramını reddetti ve artık desteklenmemektedir benziyor. Ek açıklamalarla hiçbir analog yoktur, bu nedenle @Primary, fark ettiğiniz en iyi çalışmadır.

Başka bir yol, DefaultListableBeanFactory numaralı belgede kullanılan özel org.springframework.beans.factory.support.AutowireCandidateResolver'u kullanıp, otomatik fasulye adaylarından istenmeyen çekirdekleri hariç tutan mantıktır. Bu durumda, teknoloji SimpleAutowireCandidateResolver'da autowire-candidate=false için kullanılana benzer olacaktır.

0

Ayrıca, çekmeceyi ayarlamak için çekmeceyi de kullanabilirsiniz.

Ardından @AutowireBean sınıf ve bir sınıf tanımı olarak

(çoklu eşleştirme fasulye şikayet olmadan) public fasulye autowire olacak yapabilirsiniz

@Configuration 
public abstract class VisibilityConfiguration { 

    @Bean 
    public Bean publicBean() { 
     Bean bean = new Bean(); 
     bean.setDependency(hiddenBean()); 
     return bean; 
    } 

    @Bean 
    protected Bean hiddenBean() { 
     return new Bean("protected bean"); 
    } 
} 

Bean visibility (bkz gömülü sürece) çalışma hakkında erişim private/protected Bütün fasulye örneğini verecek bir @Configuration sınıfını kullanın bir korumalı özel/gizleme (yerine doğrudan sınıflarını @Service \ @Component annotating)

Ayrıca paket korumalı erişimci bir cami gizlemek olabilir

ise kamu fasulye yayımlamak olurdu @Component açıklamalı sınıflar. Bu işe yarayacak mı bilmiyorum.