close

Bean的scope包含:singleton(default)prototyperequestsessionglobal-session

HelloWorld.java

	
package com.example ;

public class HelloWorld {
	private String message ;
	public void getMessage(){
	      System.out.println("Your Message : " + message);
	}
	public void setMessage(String message) {
		this.message = message;
	} 	
}

Main.java

package com.example ;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		ApplicationContext context = 
	             new ClassPathXmlApplicationContext("Beans.xml");
	      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
	      obj.setMessage("hello world");
	      obj.getMessage();
	      HelloWorld obj1 = (HelloWorld) context.getBean("helloWorld");
	      obj1.getMessage();
	}
}

Beans.xml


結果顯示如下:

Your Message : hello world
Your Message : hello world

scope改為prototype 結果顯示如下:

Your Message : hello world
Your Message : null (類似於request的概念,重新獲取一個新的Bean物件後則reset掉)

Bean的life cycle

初始化可實作介面InitializingBean中的afterPropertiesSet()

public class ExampleBean implements InitializingBean {
   public void afterPropertiesSet() {
      // do some initialization work
   }
}

同理亦可實作介面DisposableBean中的destroy()

public class ExampleBean implements DisposableBean {
   public void destroy() {
      // do some destruction work
   }
}

上述方式可透過Spring中的Bean去設定

HelloWorld.java

package com.example ;

public class HelloWorld {
	private String message ;
	public void init(){
		System.out.println("Initialization now") ;
	}
	public void getMessage(){
	      System.out.println("Your Message : " + message);
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public void destroy(){
		System.out.println("Destory now") ;
	}
}

透過registerShutdownHook()去呼叫destroy()

Main.java

package com.example ;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		AbstractApplicationContext context = 
	             new ClassPathXmlApplicationContext("Beans.xml");
	      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
	      obj.getMessage();
	      context.registerShutdownHook();
	}
}

Beans.xml

  
   		
   

針對不同Bean的init-method和destroy-method不需要每次都設定,可按照下列方式default設定

Beans.xml



	 
   		
   

結果顯示如下所示:

Initialization now
Your Message : Hello World!
Destory now

arrow
arrow
    全站熱搜

    Codeless 發表在 痞客邦 留言(0) 人氣()