コンストラクター引数を持ち、その値が実行時に指定されるスプリングファクトリーからオブジェクトを取得する必要があります。これを行うにはどうすればよいですか。コンストラクターがない場合、これはうまくいきました。
@Service
public class PortService implements Runnable {
@Autowired
LeaveProcessor leaveProcessor;
private Socket socket;
public PortService(Socket socket) {
this.socket = socket;
}
public void run() {
PrintWriter writer;
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String message = reader.readLine();
writer = new PrintWriter(socket.getOutputStream(), true);
writer.println(leaveProcessor.process(message));
writer.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
編集 - コンストラクターがなくても、Autowireed オブジェクトの leaveProcessor に直接アクセスすることで機能させることができます。
ソケット: これは工場出荷時にロードされます:
public void start() {
try {
ServerSocket mobCom = new ServerSocket(9846);
ExecutorService executorService = Executors.newCachedThreadPool();
while (true) {
Socket socket = mobCom.accept();
PortService portService = new PortService(socket);
executorService.submit(portService);
}
} catch (IOException e) {
e.printStackTrace();
}
}