3

私は次の「Beans.xml」を持っています。'src'フォルダーの日食にあります。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

        <bean id="user1" class="rc.User">
            <property name="name"    value="joe" />
        </bean>

    </beans>

私は次のJavaアプリケーションを持っています:

package rc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Asparagus 
{
    public static void main (String[] arguments)
    {
        ApplicationContext context = null;
        try
        {
            context = new ClassPathXmlApplicationContext("Beans.xml");
        }
        catch (ExceptionInInitializerError eiie)
        {
            System.out.println(eiie);
        }
        System.out.println("hi");
        User u = context.getBean("user1", User.class);
        System.out.println("hi2");
        System.out.println(u);
    }
}

これは、Eclipseの「src」フォルダー内の「rc」パッケージにあります。私はUserBeanクラスを持っています、私はそれを含めたほうがいいと思います:

package rc;

public class User 
{
    public User() {} 

    public String name;

    public String getName()                {return name;            }
    public void setName(String name)       {this.name = name;       }
}

そして、これを実行すると、FileNotFoundExceptionが発生します。私が考えられる唯一のファイルは私のXMLファイルですが、なぜ問題が発生するのか理解できません。

DOSを使用してディレクトリ構造を調べ、「Beans.xml」がsrcとbinの両方でアプリケーションのクラスパスのルートにあることを確認しました。これは、Asparagusクラス(「Main」と呼ばれることに反対する人)が見つかり、実行を開始するという事実によって確認されたと思います。これは、src/binがクラスパスルートでない場合はeclipseでは実行できませんでした。

私は最近、他の誰かのアドバイスでライブラリの混乱を含めましたが、この問題はなくなり、(StackOverflowで)jarがシステムライブラリとしてeclipseに含まれていることが原因であることがわかったので、 Javaランタイムを除くすべてのシステムライブラリ。

私は本当に、彼らが何をすべきかについて何も知らずに、たくさんのライブラリを追加することによってこれを解決したくないと思います。誰かがここで何が起こっているのか、そしてなぜ提案された解決策が物事を修正するのかを説明できますか?

4

2 に答える 2

0

ClassPathXmlApplicationContext:フル パスを指定する必要はありませんが、CLASSPATH適切に設定する必要があります。コードが例外をスローする場合、コンテナがクラスパスで Bean 定義を見つけられないことを意味します。クラスパスを確認して、再試行してください。

FileSystemXmlApplicationContextを使用する場合、XML Bean のフル パスを指定する必要があります。

参考までに、Spring ApplicationContext Container を確認してください。

Spring 3.1.x はアノテーションをサポートしているため、@Autowired任意の Bean を初期化するためにアノテーションを優先しました。

于 2014-05-12T09:40:48.020 に答える
0

これは、プロジェクトで使用されているスプリング ジャーの未解決の問題であることが判明しました。

Spring jar の完全なセット (8 つまたは 10 個) があり、すべて org.springframework.-3.1.1.RELEASE.jar; という形式で名前が付けられていました。これらは、Spring Tool Suite (別名 eclipse) のビルド パスに jar として配置されました。別のプログラマーは、Spring--3.1.2.RELEASE.jar の形式で jar を使用する同様に単純なプロジェクトを行っていたので、それらに切り替えました。これでコードが機能します。

助けてくれたすべての人に感謝します。2 つの jar セットの違いや、元のエラー メッセージが非常に不明瞭だった理由はまだわかりません (FileNotFoundException をスローするコードは、どのファイルについて何かを教えてくれるはずです)。

于 2013-02-04T22:40:30.113 に答える