0

これは、Netbeansで開発されたGlassfishのjsfプロジェクトです。Beanを通常のJavaクラスに接続しようとしています。

私が理解していることは次のとおりです。-マネージドBeanまたはそれに相当するCDI
がUI関連のユーザーデータ(ユーザー入力など)を処理します
-ビジネスロジックが通常のJavaクラスに実装されます
-2つのマネージドBeanまたはそれに相当するCDIが@と通信できます注入

私が見逃しているのは、Beanが通常のJavaクラスとどのように通信するかということです。(私のビジネスロジックはどこにありますか?)
言い換えると、Beanをコンストラクターへの引数として使用してJavaクラスを実行できればいいのですが。

私は試しました:
-Javaクラスに@Injectアノテーションを含めましたが、それは機能しません(Beanは注入されず、nullのままです)

public class myJavaProgram (){
@Inject
UserInputBean userInputBean;
//my business logic using the properties of userInputBean here...  //does not work, userInputBean is null!
}
  • 私のJavaクラスのコンストラクターで引数としてBeanのプロパティを渡します。動作しますが、醜いです。コンストラクターへの引数としてBean全体を直接渡すことができないのはなぜですか?しかし、そうすると、JavaクラスのBeanでnullポインタ例外が再び発生します。

    私は何かが足りないのですか?どうも!
4

2 に答える 2

4

最近のエンタープライズアプリケーションは通常、プレゼンテーション層だけでなく、アプリケーション全体で依存性注入パターンを使用します。したがって、などのBeanに寄与するデータアクセス層がありますEntityManager。これらは、ビジネスサービス層を形成するビジネスサービスに注入されます。次に、ビジネスサービスはJSFバッキングBeanに注入されます。依存性注入コンテナが最適であるかどうかは議論の余地があり、それらを混在させることもできます。

Java EE 6標準(少なくとも私が読んだ方法)では、EJBはデータアクセスとビジネスサービス層の依存性注入コンテナーとして機能し、CDIはプレゼンテーション層の依存性注入コンテナーとして機能します(そのため、CDIにEJBを注入できます豆)。他の人は、EJBを置き換えて、すべてのレイヤーでCDIを使用したいと考えています。さらに、J2EEが負わせた傷からまだ賢く、依存性注入コンテナとしてSpringを使用している人もいます。

少しコードを与えるために、あなたはするかもしれません:

@Named
@SessionScoped
public class UserBean {

    @Inject UserService userService;

    User user;

    public void save() {
        userService.create(user);
    }

}

@Stateless
public class UserService {
    public void create(User user) { ... }
}
于 2012-08-14T19:46:09.457 に答える
2

あなたがCGIと言うとき、あなたは実際にはCDIを意味していると思います...

これは、JSFアプリケーションでDI(依存性注入)を容易にするためのIoC(制御の反転)フレームワークです。このようなフレームワークのもう1つの例は、Springです。これは、より優れたJSFサポートを徐々に採用し始めています。

ビジネスロジックをマネージドBeanからCDIインジェクトされたBeanに分離する場合、JSFマネージドBeanの役割は、プレゼンテーションロジックのViewControllerとリポジトリの役割です。

アノテーションは、CDIを介して構成されたオブジェクトのみを挿入します。@Injectこれは、プロジェクトのセットアップに応じて、実際にJSFマネージドBeanが含まれる場合と含まれない場合があります。これはすべて、プロジェクトをどのように構成したか、およびどのELResolver実装が使用されているかによって異なります。これがJSF実装のデフォルトのELリゾルバー(例:Mojarra)である場合、ELリゾルバーのJSF実装が使用されており、IoCはこれらの依存関係を認識しません。

もちろん、マネージドBeanを他のマネージドBeanに依存性注入することもできますが、これはELリゾルバーを介して行う必要があります。

@ManagedProperty("#{userInputBean}")
UserInputBean userInputBean;

参照するその他のJavaクラスの依存関係は、ビジネスロジック層を表す必要があり、CDIによって構成され、CDIを介して処理される必要があります。

于 2012-08-14T19:09:51.197 に答える