2017-07-14 3 views
-1

私は別々に動作する2つのプロジェクトを持っています。最初はクラスの読み込みに使用され、2つ目は処理の処理に使用されるクラスがあります。実行時にクラスを読み込んでいるときにBeanを作成できません

最初のプロジェクトでは、クラスをロードしていますが、メソッドを呼び出すための新しいインスタンスを作成する代わりに、アプリケーションコンテキストのみを使用しています。第二に、プロジェクト内の

@Autowired 
ApplicationContext context; 

ClassLoader loader = null; 

try { 
    loader = URLClassLoader.newInstance(new URL[]{new 

File(plugins + "/" + pluginName + "/" + pluginName + 

".jar").toURI().toURL()}, getClass().getClassLoader()); 

} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} 

Class<?> clazz = null; 

try { 

    clazz = Class.forName("com.sample.Specific", true, loader); 

} catch (ClassNotFoundException e) { 

    e.printStackTrace(); 

} 

Method method = null; 
try { 
    method = clazz.getMethod("run",new Class[]{}); 
} catch (NoSuchMethodException e) { 
    e.printStackTrace(); 
} 

try { 
    method.invoke(context.getBean(clazz),new Object[]{}); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (InvocationTargetException e) { 
    e.printStackTrace(); 
} 

私はこの例を持っている:

package com.sample 

@Service 
public class Specific { 

@Autowired 
private FD fd; 


public void run(){ 

    fd.init(); 

} 

} 

私はこれらの2つの異なるプロジェクトです述べたように。私はメインクラスで最初のプロジェクトを実行するときに、それはと言う -

あなた 構成のタイプのBeanのcom.sample.Specific」を定義することを検討してください。

どのようにしてBeanを作成できますか?

答えて

0

これは、このクラスを見つけることができないためです。コンポーネントスキャン構成では、Beanの存在するパッケージを宣言する必要があります。

+0

実際には、私はこのクラスを実行時にロードしています。パッケージをすぐに宣言します。私の豆が喜ばれるところでパッケージを宣言するためのポイントやコードを教えてください。私は実行時にBeanを作成する方法を知らないので、 –

+0

あなたの協力lvanに感謝します。実際の質問は次のとおりです。https://stackoverflow.com/questions/45115102/how-to-create-a-bean-at-runtime-at-the-time-while-using-class-loading-java-refl –

+0

context-paramタグ間でweb.xmlに宣言されていることを教えてください。 –

関連する問題