【发布时间】:2016-09-18 11:46:44
【问题描述】:
如何在 Spring 中使用自定义构造函数参数创建 Autowire?以下是我的示例代码。我得到了无法自动装配字段;没有找到默认构造函数错误。我无法引入默认构造函数,因为 AbstractExecutor 类没有默认构造函数。
IExecutor
public interface IExecutor {
Object execute();
}
抽象执行器
public abstract class AbstractExecutor implements IExecutor {
private IInputPropertyBean inputObject;
private IOutputPropertyBean outputObject;
public AbstractExecutor(IInputPropertyBean inputObject, IOutputPropertyBean outputObject) {
this.inputObject = inputObject;
this.outputObject = outputObject;
}
public abstract boolean isValidInput(IInputPropertyBean inputObject) ;
public abstract IInputPropertyBean getInputValues(IInputPropertyBean inputObject);
public abstract IOutputPropertyBean process(IInputPropertyBean attribute);
public abstract IOutputPropertyBean getOutputValues(IInputPropertyBean inputObject, IOutputPropertyBean outputObject;
@Override
public Object execute(){
if(isValidInput(inputObject)){
IInputPropertyBean inputAttribute = getInputValues(inputObject);
IOutputPropertyBean outputAttribute = process(inputAttribute);
outputObject = (IOutputPropertyBean) getOutputValues(outputAttribute, outputObject);
return outputObject;
}
}
}
用户执行器
@Repository("userExecutor")
public class UserExecutor extends AbstractExecutor {
public UserExecutor(@Qualifier("userInput") IInputPropertyBean inputObject, @Qualifier("userOutput")IOutputPropertyBean outputObject) {
super(inputObject, outputObject);
}
//override methods
}
IInputPropertyBean
public interface IInputPropertyBean { }
IOutputPropertyBean
public interface IOutputPropertyBean { }
用户输入
@Component("userInput")
public class UserInput implements IInputPropertyBean { //user sepecific properties }
用户输出
@Component("userOutput")
public class UserOutput implements IOutputPropertyBean { //user sepecific properties }
用户服务实现
@Service
public class UserServiceImpl implements IUserService {
@Autowired
@Qualifier("userExecutor")
private UserExecutor userExecutor;
@Override
public UserOutput userOperation(UserInput userInput, UserOutput userOutput) {
// How to @Autowire UserExecutor with userInput, userOutput comming in service parameter.
//IExecutor executor = new UserExecutor(userInput, userOutput);
//return (UserOutput) executor.execute();
}
}
【问题讨论】:
-
我相信你应该能够在 UserExecutor 中引入一个默认构造函数,并用自动连接字段替换你当前的构造函数参数。
-
不 - 你是对的 - 它不会工作:)