Jestem nowicjuszem w ramach wiosennej wersji, rozpoczętej kilkoma samouczkami, aby się jej nauczyć.Metoda zniszczenia fasoli sprężynowej, singletonu i prototypów
mam następujące pliki,
# MainProgram.java
package test.spring;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainProgram {
public static void main(String[] args) {
AbstractApplicationContext context =
new ClassPathXmlApplicationContext("Bean.xml");
HelloSpring obj = (HelloSpring) context.getBean("helloSpring");
obj.setMessage("My message");
obj.getMessage();
context.registerShutdownHook();
}
}
# HelloSpring.java
package test.spring;
public class HelloSpring {
private String message;
public void setMessage(String message){
this.message = message;
System.out.println("Inside setMessage");
}
public void getMessage(){
System.out.println("Your Message : " + this.message);
}
public void xmlInit() {
System.out.println("xml configured initialize");
}
public void xmlDestroy() {
System.out.println("xml configured destroy");
}
}
# 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-3.0.xsd">
<bean id="helloSpring" class="test.spring.HelloSpring"
scope="prototype" init-method="xmlInit" destroy-method="xmlDestroy">
</bean>
</beans>
Kiedy biorę scope="singleton"
mój Wyjście jest:
xml configured initialize
Inside setMessage
Your Message : My message
xml configured destroy
Kiedy biorę scope="prototype"
moje wyjście jest:
xml configured initialize
Inside setMessage
Your Message : My message
xmlDestroy()
metoda jest wywoływana z singleton
zakres fasoli, ale nie z prototype
uprzejmie mi pomóc w dalszej
Czy to poprawne? jeśli tak, jakie są możliwe powody?
również mam kilka pytań w stylu:
jaka jest różnica czy relacja między ApplicationContext , AbstractApplicationContext and ClassPathXmlApplicationContext
Do zwalniania zasobów można zaimplementować DestructionAwareBeanPostProcessor zamiast zwykłego BeanPostProcessor. –