Edit: Questa domanda non è uguale a When does destroy method is called perché sto chiamando correttamente context.registerShutdownHook
e il mio fagiolo è diventando Destory come si può vedere dai log. Il mio problema è che la primavera non sta chiamando il mio metodo. Ho controllato questa domanda prima di chiedere qui.Distruggere il metodo non funziona nel quadro primavera
Sto configurando il grazioso distruggere nella mia applicazione utilizzando la struttura a molla. Quando eseguo il programma, non chiama il metodo destory specificato in bean.xml. Per favore aiutami cosa sto sbagliando.
qui è SSCCE
bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="helloworld" class="com.hello.pojo.HelloWorld"
scope="prototype" init-method="init" destroy-method="destroy">
</bean>
</beans>
HelloWord.java
package com.hello.pojo;
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void init(){
System.out.println("Bean initializating is in progress");
}
public void printMessage(){
System.out.println("Your message: "+getMessage());
}
public void destroy(){
System.out.println("Bean is being destroyed");
}
}
MainApp.java
package com.main;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hello.pojo.HelloWorld;
public class MainApp {
public static void main(String[]args){
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml");
HelloWorld objA = (HelloWorld) context.getBean("helloworld");
objA.setMessage("I am Object A");
objA.printMessage();
context.registerShutdownHook();
}
}
uscita
May 27, 2013 11:59:14 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org[email protected]e9028874: startup date [Mon May 27 23:59:14 EDT 2013]; root of context hierarchy
May 27, 2013 11:59:14 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [Bean.xml]
Bean initializating is in progress
Your message: I am Object A
May 27, 2013 11:59:14 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.s[email protected]63390b47: defining beans [helloworld]; root of factory hierarchy
May 27, 2013 11:59:14 PM org.springframework.context.support.ClassPathXmlApplicationContext doClose
INFO: Closing org[email protected]e9028874: startup date [Mon May 27 23:59:14 EDT 2013]; root of context hierarchy
May 27, 2013 11:59:14 PM org.springframework.beans.factory.support.DefaultListableBeanFactory destroySingletons
INFO: Destroying singletons in org.s[email protected]63390b47: defining beans [helloworld]; root of factory hierarchy
emendamento: Ho provato close
e registerShutdownHook()
per chiudere il contesto e nessuno di loro opere.
@MadProgrammer Penso che possiamo configurare il metodo con qualsiasi nome in bean.xml purché abbiano entrambi lo stesso nome. Anche se ho provato a distruggere e non funziona – Ashish
@MadProgrammer penso che tu voglia dire 'destroy', non' destory';) – Vulcan
@Vulcan penso che io intenda birra;) – MadProgrammer