Ich habe einige Klassen erstellt, um den Geltungsbereich von Bean im Frühling wie unten zu testen In meinem Verständnis, wenn der Bereich singelton ist, gibt Spring immer nur eine Instanz für helloWorld-Objekt. Das bedeutet, wenn ich das Programm laufen dann die AusgabeInstanz von Bean im Singleton-Bereich im Frühjahr
Ihre Nachricht sein: Hallo von Nam Tran Benachrichtigung von TestBeanScope: Ihre Nachricht: Hallo von Nam Tran
Aber eigentlich ist der Ausgang:
Ihre Nachricht: Hallo aus Nam Tran Warnung von TestBeanScope: Ihre Nachricht: Hallo Welt!
Könnten Sie bitte erklären warum?
===
package namtran.tutorial;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
==========
package namtran.tutorial;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestBeanScope {
public void getMessage(){
@SuppressWarnings("resource")
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
System.out.println("Alert from TestBeanScope:\n");
obj.getMessage();
}
}
=============
package namtran.tutorial;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
@SuppressWarnings("resource")
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.setMessage("Hello from Nam Tran");
obj.getMessage();
context.registerShutdownHook();
TestBeanScope obj1 = new TestBeanScope();
obj1.getMessage();
}
}
==== Bohnen.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="helloWorld"
class="namtran.tutorial.HelloWorld" scope="singleton">
<property name="message" value="Hello World!"/>
</bean>
</beans>
Wie kann ich tun, wenn ich möchte, ist die Ausgabe "Ihre Nachricht: Hallo von Nam Tran". Das bedeutet, dass ich das Kontextobjekt an die TestBeanScope-Klasse übergeben muss. Auf diese Weise erwarte ich keine Instanz der Bean. –
Sie können ApplicationContext mit der Annotation '@ Autowired' injizieren oder die Schnittstelle [ApplicationContextAware] (http: // docs. spring.io/spring/docs/current/javadoc-api/org/springframework/context/ApplicationContextAware.html) –
Ich meine, ich möchte eine Funktion finden, die Bean überall bekommen kann. Inject ApplicationContext ist nicht mein Weg. Sie stellen sich den Sitzungsumfang für die Bean mit der Webanwendung vor. Es ist wirklich so, wie ich es möchte. –