В настоящее время я экспериментирую на методах обратного вызова bean-компонента и замечаю, что если я определяю методы обратного вызова для одного компонента, эти методы также вызывают для других bean-компонентов.Весна: init-метод bean запускается при вызове других bean-компонентов
У меня есть классы с именем x.HelloWorld
(без обратных вызовов) и y.HelloWorld
(имеет методы init и destroy callback).
HelloWorld.java:
public class HelloWorld {
private String message;
public void setMessage(String message) {
this.message = message;
}
public void getMessage() {
System.out.println("Your Message : " + message);
}
}
HelloWorld2.java:
public class HelloWorld {
private String message;
public void setMessage(String message) {
this.message = message;
}
public void getMessage() {
System.out.println("Your Message : " + message);
}
public void init() {
System.out.println("Bean is going through init.");
}
public void destroy() {
System.out.println("Bean will destroy now.");
}
}
x.MainApp.java:
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
}
}
y.MainApp.java:
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld2");
obj.getMessage();
context.registerShutdownHook();
}
}
beans.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" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<bean id="helloWorld" class="x.HelloWorld">
<property name="message" value="Hello World (1)" />
</bean>
<bean id="helloWorld2" class="y.HelloWorld"
init-method="init" destroy-method="destroy">
<property name="message" value="Hello World (2)" />
</bean>
</beans>
Результаты: Запуск y.MainApp
(работает как ожидалось):
Bean is going through init.
Your Message : Hello World (2)
Bean will destroy now.
Бег x.MainApp
(обратный вызов init x.HelloWorld
инициируется y.HelloWorld
. Confused этого один .. любая помощь очень ценится ...)
Bean is going through init.
Your Message : Hello World (1)
Если вы поставите другой метод инициализации в x.MainApp, он будет срабатывать тоже. Вы создаете новый контекст приложения с указанной конфигурацией xml, но это не значит, что все бобы загружаются в момент создания контекста. –