2015-03-02 1137 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

相关问题