私は単純なSpringアプリケーションAppMain
をautowiringして、明示的なXML構成を使用しないようにします。特定のコンポーネントフィールド型(@SpringBootApplicationと@Autowire)の配線固有のサブクラス
私のTaskScheduler
コンポーネントでは、ThreadPoolTaskExecutor
オブジェクトをスーパークラスタイプのtaskExecutor
フィールドに配線したいと思います。 XMLでSpringで簡単なことです。
しかし、自動配線と純粋な注釈ベースの設定で可能ですか?どうやってするか?
AppMain
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class AppMain {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(AppMain.class);
app.run(args);
}
}
TaskScheduler
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;
@Component
public class TaskScheduler {
@Autowired
private final TaskExecutor taskExecutor;
@Scheduled(fixedDelay = 1000)
public void checkConfiguration() {
// TODO: do some business with task executor (expecting it to be ThreadPoolTaskExecutor in runtime)
}
}
どのように? @Autowireをフィールドの代わりにコンストラクタに追加し、コンストラクタへの入力としてスーパークラスを渡す必要があります。 – handris
ああ、そうですね、次のようなものです: '@Autowired public TaskScheduler(ThreadPoolTaskExecutor taskExecutor){this.taskExecutor = taskExecutor; } 'はトリックをする必要があります...私はそれを試してみましょう。ありがとう! – alwi
残念ながら、これは私に 'コンストラクタパラメータ0で表現されている満足していない依存関係をもたらします。 org.springframework.beans.factory.NoSuchBeanDefinitionException:型 'org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor'の適格なBeanがありません:autowire候補となる少なくとも1つのbeanが必要です。 ' – alwi