2016-03-31 18 views
2

Özellikle, bunları yapılandırıp bunları dahil ederek yapılandırma sınıflarını paylaşmak istiyorum. Normalde bu yapardın Nerede:Spring'in @ Yapılandırma ek açıklamalarını program aracılığıyla nasıl yapılandırabilirim?

@Configuration 
@Import({SharedConfiguration.class}) 
public class MyAppContext extends WebMvcConfigurerAdapter { 
    //stuff 
} 

@Configuration 
@ComponentScan("com.example") 
public class SharedConfiguration { 
    //stuff 
} 

bunu yapmak istiyorum:

@Configuration 
public class MyAppContext extends WebMvcConfigurerAdapter { 
    public SharedConfiguration sharedConfig(){ 
    return new SharedConfiguration("com.example"); 
    } 

    //stuff 
} 

@Configuration 
public class SharedConfiguration { 
    public SharedConfiguration(String package){ 
    //tell Spring to scan package 
    } 
} 

Bunun nedeni ne paket için tarama yaparak paylaşılan bileşeni söylemek mümkün olması gerektiğidir bakmak. Farklı bunun kullanılıyor hangi proje bağlı olacaktır

DÜZENLEME:.

bazı ek fikir vermek için, bizim dış yapılandırmayı kullanarak Hazırda ve EHCache kurmak için bir genel kullanım yapılandırmasını yapmaya çalışıyorum birçok projenin kullanabileceği sağlayıcı. Bunu yapmak için kesinlikle başka yöntemlere açığım ama bu benim için en mantıklı yol gibi görünüyordu. Eminim ki Bahar'da ~ bir şeyler söyleyebildiğim, "Burada! Bahar seni başlattığında bu yolu tara!" bir ek açıklama içine kodlamak yerine.

+0

XY problemi gibi geliyor; Daha fazla detay yardımcı olacaktır. Özellikle farklı durumlarda farklı paketleri taramanın amacı nedir? Bu profil, koşullu ve/veya otomatik yapılandırma için bir durum gibi geliyor. – chrylis

+0

@chrylis Sorunu daha net hale getirmek için güncelledik. Kesinlikle bir XY problemi olabilir, programatik bir şekilde bir şeyler yapmaya çalışıyorum ve Spring kesinlikle çok programatik değil. – monitorjbl

+0

Tam olarak otomatik yapılandırma yapmak istiyorsunuz. Temelde '@ Yapılandırma 'sınıflarını bulmak için SPI kullanır ve daha sonra bunları içeriğe aktarır. – chrylis

cevap

0

Bu durumda özellik kaynaklarından yararlanabilirsiniz.

@Configuration 
@ComponentScan("${packages}") 
public class SharedConfiguration {} 

Diğer Başvurulan Sınıflar - ComponentScan Bahar ifade dilini kullanarak

@RunWith(SpringRunner.class) 
@ContextConfiguration 
public class MyAppContextTest { 

    @Autowired 
    ApplicationContext context; 

    @BeforeClass 
    public static void beforeClass() { 
     // use a system property to configure the component scan location of the SharedConfiguration 
     // where the "ExampleBean" lives 
     System.setProperty("packages", "net.savantly.other.packages"); 
    } 

    @Test 
    public void ensureExampleBeanExists() { 
     // throws exception if it doesnt exist 
     context.getBean(ExampleBean.class); 
    } 


    @Configuration 
    @Import(MyAppContext.class) 
    static class TestContext { 

    } 
} 

- Test durumda
, ben Bahar mülkiyet kaynak yapılandırması tarafından alınır bir sistem özelliği ayarlıyorum -

@Configuration 
@Import(SharedConfiguration.class) 
public class MyAppContext extends WebMvcConfigurerAdapter { 

    @Autowired 
    SharedConfiguration sharedConfig; 

    //stuff 
} 

@Service 
public class ExampleBean { 

} 
İlgili konular