2015-03-02 1139 views
1

這是它用於存儲有關特定用戶的詳細信息的bean類。它有兩個名爲init和destroy的方法。當bean被初始化和銷燬​​時需要調用它。什麼時候在spring中調用bean的destroy方法?

package org.springframework.HelloWorld.beans; 

public class User { 
    private int userId; 
    private String userName; 
    private String address; 
    private String mobileNumber; 

    public User() { 
     super(); 
    } 

    public User(int userId, String userName, String address, String mobileNumber) { 
     super(); 
     this.userId = userId; 
     this.userName = userName; 
     this.address = address; 
     this.mobileNumber = mobileNumber; 
    } 

    public int getUserId() { 
     return userId; 
    } 

    public void setUserId(int userId) { 
     this.userId = userId; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public String getMobileNumber() { 
     return mobileNumber; 
    } 

    public void setMobileNumber(String mobileNumber) { 
     this.mobileNumber = mobileNumber; 
    } 

    @Override 
    public String toString() { 
     return "User [userId=" + userId + ", userName=" + userName 
       + ", address=" + address + ", mobileNumber=" + mobileNumber 
       + "]"; 
    } 

    public void init(){ 
     System.out.println("Initialized"); 
    } 

    public void destroy(){ 
     System.out.println("Destroyed"); 
    } 
} 

這是我用過的主要方法。這裏我從Beans.xml文件中獲取User對象。

public static void main(String[] args) { 
     @SuppressWarnings("resource") 
     ApplicationContext ctx = new ClassPathXmlApplicationContext("Beans.xml"); 
     User user = (User) ctx.getBean("user"); 
     System.out.println(user); 
     user.setUserName("Gnanadurai Asudoss"); 
     user.setAddress("Chxxxxx"); 
     System.out.println(user); 
     user = (User) ctx.getBean("user"); 
     System.out.println(user); 
     user=null; 
    } 

下面是Beans.xml文件,這裏我提到了bean,init方法和destroy方法。

<bean id="user" class="org.springframework.HelloWorld.beans.User" init-method="init" destroy-method="destroy"> 
 
\t \t <property name="userId" value="1"></property> 
 
\t \t <property name="userName" value="Gnanadurai"></property> 
 
\t \t <property name="address" value="Saxxxx"></property> 
 
\t \t <property name="mobileNumber" value="xxxxxxxx49"></property> 
 
\t </bean>

這是我得到的輸出。在這裏你可以看到初始化方法被調用,並且不調用Destroy方法。

Initialized 
User [userId=1, userName=Gnanadurai, address=Saxxx, mobileNumber=xxxxxxxx49] 
User [userId=1, userName=Gnanadurai Asudoss, address=Chxxxx, mobileNumber=xxxxxxxx49] 
User [userId=17505, userName=Gnanadurai Asudoss, address=Chxxxx, mobileNumber=xxxxxxxx49] 

所以我不知道何時銷燬方法會被調用..你能告訴我什麼時候它會被調用。給我舉個例子。

謝謝...

回答

1

根據這篇文章,你需要closeapplicationContext,這個動作後,你的摧毀將被調用。 Related SO question

//Getting application context 
ApplicationContext context = new ClassPathXmlApplicationContext(beansXML); 

//cleaning context 
((ClassPathXmlApplicationContext) context).close(); 
+0

是的,它的工作......感謝兄弟...... – 2015-03-02 11:29:12

1

您需要爲JVM上的應用程序上下文註冊關閉或關閉應用程序上下文。如下所示,您可以使用close()registerShutdownHook()方法。請參閱Javadoc here瞭解更多詳情。

ctx.close(); 
ctx.registerShutdownHook(); 
+0

是啊......謝謝你...... – 2015-03-02 12:31:12

相關問題