2010-02-05 8 views
7

Veri tabanı ana dizesi, kullanıcı adı ve parola gibi bazı şeyler için bir dış özellikler dosyası kullanan Spring Framework üzerine bir uygulama oluşturdum, böylece yapılandırma dosyasını depoya (açık kaynak kodlu) kontrol edebilir ve güvenliğinden ödün vermeyebiliriz. db. Ayrıca, geliştiricilerin bu dosyanın kendi kopyasını saklayabilmeleri ve uygulamanın otomatik olarak yapılandırmayı otomatik olarak yeniden yapılandırmak zorunda kalmadan sistemlerinde kullanabilmeleri de harikadır.Harici dosyada Spring Framework için bir sınıf adı belirtmek mümkün müdür?

Aynı şekilde bir fasulye belirtmek istiyorum. Geliştiriciden geliştiriciye değişebilecek bazı sınıflarla çalışıyoruz ve bu bilgileri farklı bir dosyada belirtmelerine izin verebilirsek, ana yapılandırma dosyasıyla uğraşmak zorunda kalmamaları harika olurdu.

size bir fikir vermek için, db.host başka dosyasında belirtilen

<property name="url"> 
    <value>${db.host}</value> 
</property> 

gibi bir şey var. Bizim istediğimiz

<bean name="ourBean" class="${class.weneed}" /> 

aslında çalışmıyor yukarıdaki sözdizimi gibi bir şey, ama bu yapmak istediğim şey gösteriyor.

Şimdiden teşekkürler!

Chris

cevap

7

Bunun için bir FactoryBean kullanabilirsiniz. Daha sonra

public class MyFactoryBean extends AbstractFactoryBean { 

    private Class targetClass; 

    public void setTargetClass(Class targetClass) { 
     this.targetClass = targetClass; 
    } 

    @Override 
    protected Object createInstance() throws Exception { 
     return targetClass.newInstance(); 
    } 

    @Override 
    public Class getObjectType() { 
     return targetClass; 
    } 

} 

ve:

<bean name="ourBean" class="com.xyz.MyFactoryBean"> 
    <property name="targetClass" value="${class.weneed}"/> 
</bean> 

Yay bağlamı fasulye olacaktır Bu örnek özelliklerini enjekte ederken bir Class nesneye bir sınıfadı döküm Spring yeteneğinin yararlanır bir FactoryBean olduğu türünde bir nesnedir ourBean denilen ${class.weneed}

+1

Müthiş;) Bu ASAP'a bir göz atacağım ve size döneceğim. Teşekkürler! –

0

başka bir seçenek Koza çerçevesinin parçası olmakla birlikte, kendi başına kullanılabilen, cocoon-spring-configurator kullanmak olabilir ezelî Başka bir koza maddesine bağımlıyım.
bunu bir çok web sunucumuz için kullanıyoruz. genel fikir, fasulye fabrikasını bir runningMode'a göre yapılandırmaktır.
, özellikleri kolayca yerine koymanıza/üzerine yazmanıza izin verir, aynı zamanda tam fasulye tanımlarını geçersiz kılar. Genel bir kullanım durumu, uygulamanızın kullandığı fasulyeleri tanımlamak ve daha sonra bazı fasülyeleri uygulamanın bazı bölümlerini alamayacak şekilde geçersiz kılmak için bazı yapılandırma dosyalarını (hiç bir zaman kaynak denetiminde kontrol edilmeyen) tanımlamaktır.

0

Ben yansıma yoluyla yaratılan bu fasulye uygun yay fasulyesi (ilkbahar bağlamında kayıtlı ve hiçbir özellikleri başlatılmadı), işte küçük bir gelişme olmadığını bulundu: o tam olarak ne "weneed" var

@Override 
protected Object createInstance() throws Exception { 
    AutowireCapableBeabFactory beanFactory = (AutowireCapableBeabFactory) getBeanFactory(); 
    return beanFactory.createBean(this.targetClass); 
} 
İlgili konular