私はSpringが初めてで、現在参加しているプロジェクトはSpring IOCを使用しています。これは、スタンドアロンとして表現しようとしたアプリケーションの現在のセットアップです。この以下のクラスは、サーバーの起動時にプロセスとして開始されます。
クライアント.java
public final class Client {
public static void main(String[] args) {
try {
ApplicationContext ctx = new ClassPathXmlApplicationContext("context.xml");
String[] beans = ctx.getBeanDefinitionNames();
for (String string : beans) {
System.out.println(beans);
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}
context.xml
<!-- <context:component-scan base-package="com.tradeking" /> -->
<context:annotation-config />
<bean id="stream-core" class="com.StreamHandler" scope="singleton" init-method="init">
<constructor-arg>
<ref bean="streamingthread"/>
</constructor-arg>
</bean>
<bean id="streamingthread" class="com.StreamingThread" scope="singleton" >
</bean>
</beans>
StreamHandler.java
package com;
public class StreamHandler {
private StreamingThread streamThread;
public StreamHandler(StreamingThread streamThread) {
this.streamThread = streamThread;
}
public void init() {
this.streamThread.start();
}
}
StreamingThread.java
package com;
import java.util.HashSet;
import java.util.Set;
public class StreamingThread extends Thread {
private Set<String> streamSet = new HashSet();
public void run() {
while (true) {
for (int i = 0; i < 12; i++) {
streamSet.add("Test" + 1);
System.out.println("Run Called");
}
}
}
}
ここで私の質問は、私は StreamingThread クラス内に存在する streamSet にアクセスする必要がある UbscHandler という名前の別のクラスを持っているということです
だから私はこのようにしてみました
示されているように、context.xml ファイル内にもう 1 つの Bean ID を追加しました
<context:annotation-config />
<bean id="streamingthreadnew" class="com.StreamingThread" scope="singleton" >
@Autowired
@Qualifier("streamingthreadnew")
private StreamingThread sThread;
ここで2つの問題に直面しています
- private であるため、streamSet にアクセスできません。
2. もう 1 つの Bean ID を作成する代わりに、Spring スタイルを使用してその特定のクラスにアクセスできます。
編集部分
今、私は得ています
Hi Streamed Thread Called0
java.lang.NullPointerException
at com.Client.anotherMethod(Client.java:33)
at com.Client.main(Client.java:26)
これは私のcontext.xmlです
<bean id="streamingthread" class="com.StreamingThread" scope="singleton" >
</bean>
</beans>
**This is StreamingThread**
package com;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client{
@Autowired
@Qualifier("streamingthread")
private StreamingThread streamingthread;
public void run()
{
while(true)
{
}
}
public static void main(String[] args) {
try {
ApplicationContext ctx = new ClassPathXmlApplicationContext("context.xml");
String[] beans = ctx.getBeanDefinitionNames();
for (String string : beans) {
}
Client c = new Client();
c.anotherMethod();
} catch (Throwable t) {
t.printStackTrace();
}
}
public void anotherMethod()
{
Set set = streamingthread.getData();
System.out.println(set.size());
}
}
これは私のStreaminThreadクラスです
package com;
import java.util.HashSet;
import java.util.Set;
public class StreamingThread extends Thread {
int i=0;
StreamingThread()
{
System.out.println("Hi Streamed Thread Called"+i);
}
private Set<String> streamSet = new HashSet();
public Set getData()
{
return streamSet;
}
public void run() {
/*while (true) {
for (int i = 0; i < 12; i++) {
streamSet.add("Test" + 1);
//s System.out.println("Run Called"+i);
}
}*/
}
}