2017-04-02 5 views
0

私は春を伴うインターネット上の記事やチュートリアルを読み続け、そして私は、彼らがスコープで自分@Autowiredメンバを宣言どこそれらの多くは、コードサンプルを持っていることを確認の スコープで宣言されました プライベートではなく、デフォルトの です。@Autowiredクラスのメンバーではなく、民間

など。

@Autowired 
AccountRepository accountRepository; 

代わりの

@Autowired 
private AccountRepository accountRepository; 

つまり、なぜ私は思っていました。良いカプセル化の観点からは、これは間違っていると思います。私が知りません春にこれを行うことから利益がありますか?

+0

これらはプライベートにすることもできますが、春はリフレクションによってフィールドの可視性を変更する必要があります。これは、セキュリティマネージャによって許可されない可能性があります。 –

+4

実際のカプセル化では、フィールドをオートワイヤしません。代わりにコンストラクタをオートワイヤします。これはまた、テストを容易にし、依存関係をより明確にします。 –

+1

例を挙げると、簡潔にするために 'private'を省略することができます。結局のところ、これらのチュートリアルでカプセル化を教えているわけではなく、要点ができるだけ明確であることを望んでいます。 –

答えて

1

フィールドに依存関係を直接注入するのではなく、コンストラクタインジェクション(@JBNizetも指摘しています)を使用することをお勧めします。詳細はhereを参照してください。

つまり、@AutowiredをBeanコンストラクタで使用する必要があります。通常はpublicです。

関連する問題