4

私は現在、Java-eeチュートリアルのリソース注入の章を読んでいますが、リソースを注入した後にリソースを利用する方法、つまりリソー​​スにアクセスする方法を理解できません。

フィールドベースの注入:

public class SomeClass {
    @Resource(name="customerDB")
    private javax.sql.DataSource myDB;
...
}

メソッドベースの注入:

public class SomeClass {

    private javax.sql.DataSource myDB;
...
    @Resource(name="customerDB")
    private void setMyDB(javax.sql.DataSource ds) {
        myDB = ds;
    }
...
}

クラスベースの注入:

@Resource(name="myMessageQueue",
                type="javax.jms.ConnectionFactory")
public class SomeMessageBean {
...
}

class-basedでのみ可能だと思いますlookup(正確には?)。ただし、最初の 2 つのケースでは、リソースをどのように使用すればよいでしょうか?

アップデート:

完全に明確でない場合、私の質問は次のトピックに関するものです。

1)field-またはmethod-based injection次のようなリソースにアクセスしますか?

myDB.someMethod();

また

customerDB.someMethod();

最初が正しい場合、その目的は何nameですか? でもアクセスできますlookupか?

2) どのようにアクセスしclass-based injectionますか? と思いますlookupが、どのパスの下ですか?

4

2 に答える 2

0

最初の質問に答えるには:

@Resource(name="customerDB")
private javax.sql.DataSource myDB;

上記のコードは、プライベート フィールドmyDBに という名前の DataSource を挿入することを意味し"customerDB"ます。フィールドの名前とリソースの名前は、まったく別のものです。変数名は自由です。リソース名は、JNDI で構成された DataSource の名前にする必要があります。

そしてもちろん、myDBフィールドにアクセスするために を使用します。それがフィールドの名前だからです。注釈は、通常の Java クラス、フィールド、およびメソッドに関連付けられた単なるメタデータです。Java の動作は変わりません。フィールドにアクセスするには、フィールドの名前を使用します。フィールドに関連付けられた Java EE アノテーションの名前ではありません。

2 番目の質問については、公平を期すために、クラスベースのインジェクションが何を意味し、いつ役立つのかわかりません。

于 2013-11-10T12:39:04.860 に答える