2016-12-26 5 views
0

私はいくつかのSpring Beanが定義されたjarファイルを持っています。私の質問には、このjarファイルのInputStreamオブジェクトがあり、そこからすべてのSpring Bean名を取得する方法は?または、ApplicationContextのインスタンスを取得するパラメータとして、InputStreamのSpring公式APIがありますか?答えが「はい」の場合は、ApplicationContext.getBeanDefinitionNames()を使用してBean名を取得できます。jarファイル内のすべてのSpring Bean名を取得する方法は?

ありがとうございます。

+0

あなたはInputStreamが.jarファイルを意味するのですか?あなたは何らかの仕組みで1つ持っていますか? ... // – MordechayS

+0

このjarファイルはWebページからアップロードされ、 'InputStream'オブジェクトはSpring Controllerクラスのハンドラメソッドの' MultipartFile'型のパラメータオブジェクトから取得されます。 – walsh

+0

getBeanDefinitionNamesは、このファクトリで定義されているすべてのBeanの名前を返します。私が2つのシナリオのために書いた答えは、同じ出力に別名定義名を与えます。確認してください。 @walsh –

答えて

0

答えを追加することができます。これは以前と同じように私を助けました。あなたはまた、ここで

は一例であり、[リンクされdocumentyationをチェック] JarInputStreamを使用することができます
、私はそれはあなたを助けるかもしれない願っています。

のInputStreamの場合
try { 
      File file = new File("myJar.jar"); 
      FileInputStream fInput = new FileInputStream(file); 
      JarInputStream jInput = new JarInputStream(fInput); 
      //This class is used to represent a JAR file entry. 
      JarEntry je; 
      while((je=jInput.getNextJarEntry())!=null){ 
       //gives fully qualified name of classes inside jar 
       System.out.println(je.getName()); 
      } 
      jInput.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 



void someMethodName(InputStream jarFile) { 
JarInputStream jarInputStream = null; 
try { 
    jarInputStream = new JarInputStream(jarFile); 
    JarEntry je; 
    while((je=jarInputStream.getNextJarEntry())!=null){ 
       //gives fully qualified name of classes inside jar 
       System.out.println(je.getName()); 
    }catch (IOException e) { 
      e.printStackTrace(); 
    }} 

は、それが役立つかどうかどうか、分からないのですが、私はこの数回行っていたと思ったし、どうしてそれをあなたと分かち合うのですか?それが助けてくれたら教えてください。

+0

あなたの返信をありがとう!しかし、私の悪い記述には申し訳ありません。私が必要とするのは、jarファイルに定義されているすべてのスプリングビーン情報をjarファイルのファイル名ではなく取得することです。 – walsh

+0

私は私の答えを編集しました。 InputStreamを確認してください。そして、あなたはすべての豆の情報によって何を意味しますか? @walsh –

+0

私はSpringフレームワークを使用し、そのファイルにいくつかのBeanを定義しました。 – walsh

0

特定のjarで宣言されているすべてのBeanがわかるので、jar/warに定義されているSpring Beanの設定ファイル名をApplicationContextに渡す必要があります。

ApplicationContext appCon = new ClassPathXmlApplicationContext("parentConfig.xml","springConfig.xml"); 

は瓶/戦争&内で定義されたスプリングの設定ファイル「springConfig.xml」を考える:あなたは、二重引用符&コンマはこのように分離して、設定ファイル名を渡すことで、あなたが好きなだけ設定ファイルを渡すことができます"parentConfig.xml"ファイルは、現在のプロジェクトで定義されている実際のスプリング構成ファイルです。

あなたは正しいです、あなたはすべての豆が(getBeanDefinitionNamesを使用して宣言得ることができます)

List<String> beansList = Arrays.asList(appCon.getBeanDefinitionNames()); 

beansList.forEach(bean -> System.out.println(bean)); 

上記の文は、すべてのjar/warファイル&で定義された豆だけでなく、現在のプロジェクトの春に宣言した豆を印刷します設定ファイル( "parentConfig.xml")。

関連する問題