0

通常、Springでサービスを注入する必要がある場合は、

 <bean id="mycontroller" class="com.MyController">
    <property name="myService" ref="myService" />

<bean id="myService" class="com.MyService"></bean>

JSFを使用するときに同じことを行う方法は?Beanに2つのIOCコンテナーを使用するのではなく、facesコンテキスト自体に保持します。私は次のようなリンクを見てきました

JSF 2は、@ ManagedPropertyを使用し、xmlを使用せずにSpring Bean/Serviceを注入します

スプリングBeanをjsfBeanに注入する際の問題。彼らは、SpringマネージドBeanをJSFコンテキストに注入することについて話します。私がやろうとしていることは本当に単純でなければなりませんが、関連する情報を見つけることができません。初心者であり、どんな助けにも感謝します。

4

2 に答える 2

6

「豆」という言葉に戸惑うかもしれません。問題は、あなたが話している「サービス」も春の豆ですよね?

構成に応じて、Springによって追加されたいくつかの追加機能(おそらくトランザクション管理)があるため、おそらくサービスとして使用しています。

JSF IoCコンテナは非常に単純であり、トランザクション管理やAOPなどを含むようにライフサイクルを構成することはできません。Spring(またはJava EE環境ではEJB)と関係があること。

したがって、SpringでJSFを使用する場合、通常は2つの選択肢があります。

  1. JSFページのバッキングBeanをJSFコンテナーに入れ、、、、などで注釈を@ManagedBean付け@RequestScopedます@ViewScoped。必要な春の豆を@ManagedPropertyプロパティに注入します(セッターが必要です)
  2. または、JSFコンテナをスキップして、バッキングBeanを他のすべてのBeanと一緒にSpringコンテナに入れ、Springスコープのリクエスト/セッションを使用して、Springのアノテーション@Componentでアノテーションを付けたり@Scope("request")@Scope("session")などでインジェクションし@Autowiredたり@Qualifierします。

個人的には、その選択に直面して、私は最初の選択をします。それはあなた@ViewScopedと他のいくつかの良い点を与えるからです。確かに2つのIoCコンテナーを使用しますが、どちらのJava EEアプリを使用しませんか?

とにかく2番目のルートに行きたい場合は、JSFviewMapに裏打ちされたSpringBeanのビュースコープを追加することもできます。

于 2013-01-23T01:26:32.130 に答える
2

Springが「サービス」と呼ぶものは、JavaEE用語では「EJB」です。EJBは、Glassfish、JBossAS、TomEEなどのJavaEEWebプロファイルコンテナーで利用できる箱から出しています。

ステートレスEJBサービスを作成する@Statelessには、クラスで次を使用するだけです。

@Stateless
public class SomeService {

    public void doSomething() {
        // ...
    }

}

そして、それをJSFマネージドBeanに注入するには、注入@EJBされるプロパティで使用します。

@ManagedBean
@ViewScoped
public class SomeController {

    @EJB
    private SomeService service;

}

それでおしまい。ゲッター/セッターは必要ありません。XML定型文は必要ありません。

于 2013-01-23T12:37:45.103 に答える