close
Bean的scope包含:singleton(default)、prototype、request、session、global-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
全站熱搜