0

コンストラクター引数を持ち、その値が実行時に指定されるスプリングファクトリーからオブジェクトを取得する必要があります。これを行うにはどうすればよいですか。コンストラクターがない場合、これはうまくいきました。

@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();
    }

}
4

2 に答える 2

0

ファクトリ Bean を実装する必要があります

public class PortServiceFactory implements FactoryBean<PortService> {
     PortService getObject() {
         Socket socket;
         // Code to initialize the socket
         return new PortService(socket);
     }
     // FactoryBean interface requires a couple of other methods,
     // implement those
}
于 2013-04-10T06:52:56.823 に答える