非常にXMLがスリム化されたアプリケーションにSpringMVCコントローラーがあり、多くのアノテーションと可能な限り少ない構成を使用しています。コントローラは機能しており、多数のリソース値が注入されています。しかし、私はこのコントローラーで本当に奇妙な振る舞いを経験しました。他のコンポーネントを参照する注釈付きのプライベートフィールドは挿入されません。これは機能しません。
@Controller
public class EntranceUnitController {
@Value("${remote.baseUrl}")
private String baseUrl = "http://localhost";
@Value("${remote.port}")
private String pushPort = "8080";
@Autowired
private HttpClientFactory httpClientFactory;
...
httpClientFactory
プライベートフィールドが設定されているときはまだ存在しないようですが、ブレークポイントを設定して値を検査すると、もちろんnull
コントローラーの作成時に設定されます。
ただし、コンポーネントのセッターを作成し、プライベートフィールドの代わりにset-methodに注釈を付けると、コントローラーは期待どおりに機能します。
@Controller
public class EntranceUnitController {
@Value("${remote.baseUrl}")
private String baseUrl = "http://localhost";
@Value("${remote.port}")
private String pushPort = "8080";
private HttpClientFactory httpClientFactory;
@Autowired
public void setHttpClientFactory(HttpClientFactory httpClientFactory) {
this.httpClientFactory = httpClientFactory;
}
...
私にとって、これは本当に迷惑です。注入点に関係なく、注釈値の自動配線注入が同時に発生していませんか?つまり、オブジェクトにセッターが注入されることが重要なのはなぜですか?プライベートフィールドインジェクションの直後にコンストラクトとセッターが続くと思いましたが、その場合は間違っていると思い始めます...