Open U-O-Nanakusa724 opened 3 years ago
現在のAutowiredの方法はフィールドインジェクションと呼ばれるものだが、これはSpringBoot的には推奨しない方法な模様。 可能なら修正したい。 特にCSV取り込みはCar,Grade,Store,Color,Detail,Priceの6つのサービス・リポジトリと関わるので、いつか発生する危険もある。 今までは一律リポジトリを呼んでいたから良かったが、CSV取り込みサービスは他サービスのインポートをせざるを得ない。 (リポジトリのみAutowiredするルールで行くと重複チェックしながら登録メソッドなどをCSV取り込みサービスにもかかないといけなくなり冗長なので各Serviceの直接Autowiredを行いたいが、上の通り推奨していなく行う場合今のままでは下記のような問題が発生する)
・循環参照が起こりうる あるクラスAではクラスBをAutowiredし、BではAをAutowiredしている場合、どちらか片方のAutowiredが走るとお互い参照し合い続けStackOverFlowを起こす現象。
・DIの中身がnullでも動いてしまう 何らかの影響で中身がなくなってしまっても動くことから、不具合などのトラブルにつながる
・暗黙的デフォルトコンストラクタによる動作不具合を防ぐ コンストラクタを定義するため暗黙のデフォルトコンストラクタに蓋ができること、 ここで定義しないフィールド変数は利用できなくなること、 フィールドにfinalをつけられるので動作安定性が増すことがメリット。
https://retheviper.github.io/spring/2019/12/09/spring-dependency-injection/
@rayboc こちら重めのタスクになると思います。 抱えているタスク少なければ取り組んでみてください。
タスク
現在のAutowiredの方法はフィールドインジェクションと呼ばれるものだが、これはSpringBoot的には推奨しない方法な模様。 可能なら修正したい。 特にCSV取り込みはCar,Grade,Store,Color,Detail,Priceの6つのサービス・リポジトリと関わるので、いつか発生する危険もある。 今までは一律リポジトリを呼んでいたから良かったが、CSV取り込みサービスは他サービスのインポートをせざるを得ない。 (リポジトリのみAutowiredするルールで行くと重複チェックしながら登録メソッドなどをCSV取り込みサービスにもかかないといけなくなり冗長なので各Serviceの直接Autowiredを行いたいが、上の通り推奨していなく行う場合今のままでは下記のような問題が発生する)
今のままだと何が問題か
・循環参照が起こりうる あるクラスAではクラスBをAutowiredし、BではAをAutowiredしている場合、どちらか片方のAutowiredが走るとお互い参照し合い続けStackOverFlowを起こす現象。
・DIの中身がnullでも動いてしまう 何らかの影響で中身がなくなってしまっても動くことから、不具合などのトラブルにつながる
・暗黙的デフォルトコンストラクタによる動作不具合を防ぐ コンストラクタを定義するため暗黙のデフォルトコンストラクタに蓋ができること、 ここで定義しないフィールド変数は利用できなくなること、 フィールドにfinalをつけられるので動作安定性が増すことがメリット。
詳細設計
参考サイト
https://retheviper.github.io/spring/2019/12/09/spring-dependency-injection/