1. 程式人生 > >Spring Bean相關操作

Spring Bean相關操作

spring中兩個最基本、最重要的包org.springframework.beans 和 org.springframework.context。為了實現無侵入式的框架,這兩個包中大量使用了java中的反射機制。

最重要的兩個類

   BeanFactory------->先進的配置機制管理任何種類的Bean 

   ApplicationContext-------->建立在BeanFactory之上,並增加了例如支援國際化、獲取資源、事件傳遞等功能


Bean的配置

<bean id="life" init-method="init" destroy-method="destroy" scope="prototype" class="SpringLifeCycle"/>

public class SpringLifeCycle {
    public SpringLifeCycle(){
        System.out.println("SpringLifeCycle");
    }
    //定義初始化方法
    public void init(){
        System.out.println("init...");
    }
    //定義銷燬方法
    public void destroy(){
        System.out.println("destroy...");
    }

    public void 
sayHello(){ System.out.println("say Hello..."); } }

<bean id="hellostaticfac" factory-method="getInstances"  lazy-init="true" class="HelloStaticFactory"/>
public class HelloStaticFactory {
    public HelloStaticFactory(){
        System.out.println("HelloStaticFactory constructor"
); } //靜態工廠方法 public static Test getInstances(){ return new Test(); } }

depends-on:可以用來在初始化使用這個Bean之前,強制執行一個或者多個Bean的初始化。


Bean初始化:

        1.配置文件中 配置init-method屬性(推薦使用)

        2.實現org.springframework.bean.factory.InitializingBean介面(會自動執行 afterPropertirsSet()方法進行屬性初始化,不推薦使用,未解耦spring)


Bean的使用:

1.使用BeanWrapper

HelloWorld hw = new HelloWorld();

BeanWrapper bw = new BeanWrapperImpl(hw);

bw.setPropertyValue("msg","hello world!");

System.out.println(bw.getPropertyValue("msg"));


2.使用BeanFactory

InputStream is = new FileInputStream("config.xml");

XmlBeanFactory fac = new XmlBeanFactorty(is);

HelloWorld hw = (HelloWorld)fac.getBean("HelloWorld");

System.out.println(hw.getMsg());

3.使用ApplicationContext

ApplicationContext ac = new FileSystemXmlApplicationContext("config.xml");

HelloWorld hw = (HelloWorld)ac.getBean("HelloWorld");

System.out.println(hw.getMsg());


Bean的銷燬

1.配置檔案中指定 destroy-method

2.實現org.springframework.bean.factory.DisposableBean介面(自動執行destory())

ref屬性指定bean的 三種模式

1.local


local必須與bean的id一致,在同一個xml 中如果沒有匹配元素,xml解析器將會產生一個錯誤,如果一個bean與被引用的bean在同一個xml中,則用local是最好的選擇。

2.bean屬性

bean屬性最大的優點是 被引用的bean可以不在同一個xml中。bean屬性的值可以與被參考引用的bean的id屬性相同,也可以與name屬性相同。

3.parent

各位看官自己查文件瞭解即可,不常用,我也沒看懂啥意思就不寫了