2011-08-05 3 views
7

私はSpring 3を使って新しいプロジェクトに取り掛かりました。私は注釈を使用しています。私は依存関係を注入するためにクラスを配線することが大好きですが、context:component-scanをベースパッケージから開始するのは悪い習慣です。コンポーネントスキャンのためにSpring 3でクラスを整理するための賢い方法はありますか?

私はDispatcherServletを使用していますが、独自のxml構成ファイルがあります。その中にはcontext:component-scanもあります。私が最初に春を学び始めたとき、コンポーネントのスキャンで重複していて、複数回作成された豆を見ました。私はそれを避けたいです。

私のパッケージまたは私のコンポーネントスキャンのいずれかを構成して、重複せずにすべてのBeanをカバーするにはどうすればよいですか?

は現在、私はこのようなパッケージを持っている:私はすべてのそれらのパッケージで豆を持っている場合、それは簡単な方法のように思える

my.package.controller 
my.package.dao 
my.package.entity 
my.package.service 
my.package.util 

アウトapplicationContext.xmlをへ<context:component-scan base-package="my.package"></context:component-scan>を入れて、それを使って行うことになります。

my.package.controllerをディスパッチャのxmlでスキャンし、残りの部分(application.example.comを除く)をapplicationContext.xmlでスキャンする方が良いでしょうか?

私はすべての注釈付きクラスを1つの領域に配置する必要がありますか?以下のような何か:

my.package.spring.controller 
my.package.spring.dao 
my.package.spring.entity 
my.package.spring.service 
my.package.spring.util 
my.package.notannotated 
my.package.notannotated2 

私は私が注釈されることはありません任意のクラスを持っているだろうことを知っていないので、そうでない場合は、ほとんどの私のクラスのすべてのログを追加する@Autowiredを使用しています。

私は設定に嫌われています...私はむしろコードで詰まっているので、誰かが何かヒントを提供できる場合、私はすぐにそれらを歓迎するでしょう。

ありがとうございます!

答えて

12

はい - あなたの主な文脈でのコントローラ

<context:component-scan base-package="my.package"> 
    <context:exclude-filter type="regex" expression="my\.package\.controller.*"/> 
</context:component-scan> 

とあなたのDispatcherServletコンテキストでは、単にコントローラパッケージをスキャン以外のすべてをスキャンします。

+0

うわー、それは私が思ったよりも簡単だった、ありがとう。私のパッケージ設定は妥当かどうか? – Paul

+0

私には良く見えますが、それは私がやることとほぼ同じです。 – sourcedelica