0

投稿で複数の質問をすることが許されているかどうかはわかりませんが、ここにあります。

たとえば、次のようなものがあります。

コントローラー

@Controller
public class FooController{

    @Autowired
    private FooService fooService;

    @RequestMapping(value="/foo", method=RequestMethod.POST)
    public @ResponseBody foo(@RequestBody FooRequest request){
    }

}
@Controller
public class BarController{

    @Autowired
    private FooService fooService;

    @RequestMapping(value="/bar", method=RequestMethod.POST)
    public @ResponseBody bar(@RequestBody FooRequest request){
    }

}

サービス

public class FooService{

    private Foo foo;

    public Foo getFoo() {
        return foo;
    }
    public void setFoo(Foo foo) {
        this.foo = foo;
    }
    public String doFoo(String str){
        return foo.doFoo(str);
    }
}

仕事をするクラス

public class Foo{

    public String doFoo(String str){
        return (str + " is foo");
    }
}

依存性注入を使用して Bean を作成する

<context:annotation-config/>

<bean id="fooService" class="com.myapp.service.FooService">
    <property name="foo" ref="foo"></property>
</bean> 
<bean id="foo" class="com.myapp.foo.Foo">
</bean>

私の質問は次のとおりです。

  1. @serviceクラスで注釈を使用しませんでした。使用FooServiceする必要がありますか?なぜですか?
  2. この構成はスレッド セーフかどうか、またその理由(スレッド セーフである場合はどのように達成されるか) を教えてください。
  3. Spring デザインで使用されるレイヤー (dao レイヤー、サービス レイヤーなど) とそのようなデザインの目的に関するチュートリアルはどこにありますか?
4

3 に答える 3

4
  1. Bean を xml-config で宣言する場合は、アノテーションを使用する必要はありません。
  2. です。各 Bean はシングルトンですが、ステートレスです。したがって、同時変更は発生しません。
  3. たとえば、ウィキペディアで。春限定ではありません。3 層アーキテクチャに関する記事を探す
于 2012-07-20T08:31:28.853 に答える
1
  1. これを使用すると、XML を使用して Bean を宣言する必要がなくなります。他の Bean に注釈を使用することを選択しました。したがって、これにも注釈を使用します。
  2. はい、そうです。Spring は、リクエストを処理する前に、同期バリアを使用して、すべてが適切に接続および初期化されていることを確認するためです。
  3. これは非常に幅広い質問です。階層化は、懸念の分離、テスト容易性、トランザクションを宣言的に区別する機能などに役立ちます。
于 2012-07-20T08:33:07.430 に答える
1
  1. @Repository、@Service、または @Controller (@Components のサブアノテーション) は、特定のクラスをマークするために使用されるため、多かれ少なかれメタデータと見なすことができます。ただし、これらを利用できる Spring フレームワークの機能がいくつかあります。それらの 1 つは自動コンポーネント スキャンです (指定された Java パッケージで上記のアノテーションを持つクラスが検索され、これらのクラスは XML で宣言されているかのように Spring Bean として使用できます)。これを有効にするには、これを春のコンテキストに入れる必要があります。

    <context:component-scan base-package="my.service.package"/>

    詳細については、http ://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-classpath-scanning を参照してください。

    別のユースケースは AOP です。すべてのリポジトリ クラスを選択できる、注釈対応のポイントカットを作成できます。

  2. コンテキスト内の Spring Bean は 1 つずつ起動されるため、同時実行性が発生する可能性はありません。ただし、Bean 間に循環依存関係が存在する可能性があり、Spring がこれを適切に解決する場合としない場合があります。

  3. DAO とサービスの両方について、現在の Spring 3 ドキュメントは多くの例を提供しており、おそらく学習に最適なソースです: http://static.springsource.org/spring/docs/3.0.x/reference/index.html JdbcTemplate、Rowmappers、および Hibernate を使用した ORM ベースの構成を試すことをお勧めします。

于 2012-07-20T08:50:51.647 に答える