カスタムコンストラクタ引数を使用してSpringでAutowireを作成するにはどうすればよいですか?以下は私のサンプルコードです。私はフィールドをautowireできませんでした。 AbstractExecutorクラスにデフォルトのコンストラクタがないため、デフォルトコンストラクタにエラーが見つかりません。デフォルトコンストラクタを導入できません。カスタムコンストラクタ引数を使用してAutowireを作成する方法
IExecutor
public interface IExecutor {
Object execute();
}
AbstractExecutor
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;
}
}
}
UserExecutor
@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 { }
変数UserInput
@Component("userInput")
public class UserInput implements IInputPropertyBean { //user sepecific properties }
UserOutput
@Component("userOutput")
public class UserOutput implements IOutputPropertyBean { //user sepecific properties }
UserServiceImpl
@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にデフォルトのコンストラクタを導入し、現在のコンストラクタパラメータを自動配線フィールドに置き換えることができると信じています。 –
いいえ - あなたは正しい - それは動作しません:) –