Java 使用构造函数自动关联对象

Java 使用构造函数自动关联对象,java,spring,dependency-injection,Java,Spring,Dependency Injection,我需要从SpringFactory中获取一个对象,该对象有一个构造函数参数,其值在运行时指定。我该怎么做呢。如果我没有任何构造函数的话,这很有效 @Service public class PortService implements Runnable { @Autowired LeaveProcessor leaveProcessor; private Socket socket; public PortService(Socket socket) { this.socket =

我需要从SpringFactory中获取一个对象,该对象有一个构造函数参数,其值在运行时指定。我该怎么做呢。如果我没有任何构造函数的话,这很有效

@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();
    }
}
}
编辑-没有构造函数,我可以通过直接访问Autowired对象处理器使其工作

插座:这是从工厂加载的:

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

}

您将需要实现一个工厂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
}
公共类PortServiceFactory实现FactoryBean{
PortService getObject(){
插座;
//初始化套接字的代码
返回新端口服务(套接字);
}
//FactoryBean接口需要一些其他方法,
//实施这些
}

从context.xml文件本身传递构造函数参数

    <bean id="theBeanID" class="your.package.PortService" >
       <constructor-arg ref="socketBeanID"  />  
     </bean>

    <bean id="socketBeanID" class="your.package.Socket" />
或者,使用new关键字在类PortService本身中实例化它


或者,如果需要,使用一些静态工厂方法来创建套接字对象。

谁在传递
Socket
查看@Configurable,这将需要aspectj加载时编织。最好的选择是创建一个由spring管理的工厂类,然后使用它来创建对象。
@Autowired
private Socket socket;