Java 使用构造函数自动关联对象
我需要从SpringFactory中获取一个对象,该对象有一个构造函数参数,其值在运行时指定。我该怎么做呢。如果我没有任何构造函数的话,这很有效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 =
@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;