假設HelloBean的內容如下:
package onlyfun.caterpillar;
public class HelloBean { private String helloWord; public HelloBean() { } public void setHelloWord(String helloWord) { this.helloWord = helloWord; } public String getHelloWord() { return helloWord; } }
XML檔案的階層格式適用於於組態設定,也因此許多的開源專案都將XML作為預設的組態定義方式,但通常也會提供非XML定義檔的方式,像屬性檔案.
properties,Spring也可以讓您使用屬性檔案定義Bean,例如定義一個beans-config.properties:
helloBean.class=onlyfun.caterpillar.HelloBean helloBean.helloWord=Welcome!
屬性檔中helloBean名稱即是Bean的名稱,.class用於指定類別來源,其它的屬性就如.helloWord即屬性的名稱,可以使用
org.springframework.beans.factory.support.PropertiesBeanDefinitionReader
來讀取屬性檔,一個範例如下:
package onlyfun.caterpillar;
import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.PropertiesBeanDefinitionReader; import org.springframework.core.io.ClassPathResource;
public class SpringDemo { public static void main(String[] args) { BeanDefinitionRegistry reg = new DefaultListableBeanFactory(); PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(reg); reader.loadBeanDefinitions( new ClassPathResource("beans-config.properties")); BeanFactory factory = (BeanFactory) reg; HelloBean hello = (HelloBean) factory.getBean("helloBean"); System.out.println(hello.getHelloWord()); } }
除了透過XML或屬性檔案,您也可以在程式中直接編程,透過
org.springframework.beans.MutablePropertyValues設置屬性,將屬性與Bean的類別設定給
org.springframework.beans.factory.support.RootBeanDefinition,並向
org.springframework.beans.factory.support.BeanDefinitionRegistry註冊,不使用任何
的檔案來定義的好處是,客戶端與定義檔是隔離的,他們無法接觸定義檔的內容,直接來看個例子:
package onlyfun.caterpillar;
import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.MutablePropertyValues;
public class SpringDemo { public static void main(String[] args) { // 設置屬性 MutablePropertyValues properties = new MutablePropertyValues(); properties.addPropertyValue("helloWord", "Hello!Justin!"); // 設置Bean定義 RootBeanDefinition definition = new RootBeanDefinition(HelloBean.class, properties); // 註冊Bean定義與Bean別名 BeanDefinitionRegistry reg = new DefaultListableBeanFactory(); reg.registerBeanDefinition("helloBean", definition); BeanFactory factory = (BeanFactory) reg; HelloBean hello = (HelloBean) factory.getBean("helloBean"); System.out.println(hello.getHelloWord()); } }
|