SpringでBeanのスコープをテストするためにいくつかのクラスを作成しました。 私の理解では、スコープがsingeltonの場合、Springは常にhelloWorldオブジェクトのインスタンスを1つだけ与えます。ナムトランからこんにちはSpringのSingletonスコープのBeanのインスタンス
をしかし実際には、出力は次のとおりです:あなたのメッセージ :ナムトラン アラートからTestBeanScopeからこんにちは:それは私がプログラムを実行すると、出力は
あなたのメッセージであることを意味
メッセージ:Hello from Nam Tran TestBeanScopeのアラート: メッセージ:Hello World!
理由を教えてください。
===
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();
}
}
==== 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"
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>
となります。出力が「あなたのメッセージ:ナム・トランからのこんにちは」である場合、どうすればいいですか。これは、コンテキストオブジェクトをTestBeanScopeクラスに渡す必要があることを意味します。この方法はBeanのインスタンスを保持するための私の期待ではありません。 –
注釈@Autowiredを使用してApplicationContextを挿入するか、インタフェース[ApplicationContextAware](http:// docs。 spring.io/spring/docs/current/javadoc-api/org/springframework/context/ApplicationContextAware.html) –
私はどこでもbeanが得られるという機能を見つけたいと思っています。 InjectContextは私の方法ではありません。 Webアプリケーションを使用してBeanのセッションスコープを想像してください。それは私が本当に望む方法です。 –