私はペットプロジェクトをGuiceからSpring DIに移し終えました。私はいくつかのノートを共有し、アドバイスを求めたいです。 Guice configはアノテーション(唯一の可能な方法)で行われ、Springコンフィグレーションは@Configurationでアノテーションされた1つのAppConfigクラスと@Bean内部でアノテーションされたたくさんのBean作成メソッドも持つアノテーションでのみ実行されます。GuiceからSpringへの移行:デフォルトのコンストラクタとプロパティの処理を伴うBean
観察と質問:
Springの設定は デフォルトで引数なしのコンストラクタをBeanを作成しない方法でいっぱいです:間違いなく悪い
@Bean public DataProvider getDataProvider() { return new DataProvider(); }
厥。 guiceは、追加構成なしで、デフォルトの コンストラクタでBeanをインスタンス化します。私は 春でこれを行うことはできますか?もし私が@Componentアノテーションを クラスパススキャンアノテーションと一緒に追加すると、そのトリックが実行されます。しかし、:1. @Componentでの注入は、@Bean 2での注入とは異なります。 の場合、@Autowiredを追加するよりもさらに多くのファイルに設定を分散する必要があります。それは良くないね。すべての の設定を1つの場所に保持する唯一の解決策は、古いXML設定ですが、もう一度 すべてのBeanの明示的な宣言を行います。または私は間違っています、これは がSpringでうまくいったことができますか?
- プロパティファイルの処理。 Guiceと一緒に働いている間、私は悪いことをしました:私は、プロパティ値が注入された膨大な数のプライベートフィールドに沿って@Namedアノテーションを散在させました。いくつかのクラスには5つのプロパティが注入されることがあり、その結果、5つの注釈が得られました。それは良い解決策ではありませんでした。私はSpringでうまくやろうとしましたが、私が見つけた唯一のことはどこでも設定ファイルをインスタンス化して注入することでした。ただ、この完成度の見てみましょう:私のペットプロジェクトが再びリファクタリングする必要がありますように
@Bean public MyProjectStorageConfiguration getStorageConfiguration( @Value("${mongo.collections.names})") String mongoNames, @Value("${mongo.collections.data})") String mongoData, @Value("${files.maindata})") String mainData, @Value("${files.secondarydata})") String secondaryData, @Value("${files.backupdata})") String backupData, @Value("${files.additionaldata})") String additionalData) { return new MyProjectStorageConfiguration(mongoNames,mongoData, mainData,secondaryData,backupData,additionalData); }
が見えます。助言がありますか?
ポイント1ではわかりませんが、ポイント2は作成後にBeanを取得するBeanポストプロセッサを作成することで実行できます。次に、独自のBeanを検査し、文字列や整数などのプロパティタイプを自動挿入することができます。もちろん、注入可能なプロパティに名前を付ける方法やそれをプロパティとしてマークする別の注釈のいずれかを考え出す必要があります。そして、慣習として、フィールド名はプロパティ名に対応することができ、豆に関するアノテーションなしでそれらを解決できますか?個人的には、私はこれを明示的にするといいと思う。あまりにも多くの魔法の殺害;) – pandaadb