実際に私は次のように春のメインクラスを持っています。クラスオブジェクトが新しくなったとき@springアノテーションを使用できません
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(clazz.newinstance,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();
}
}
@Autowired
FD
はnullにしています。誰も私には、新しい演算子は@autowired
のために動作しません知っているように私にいくつかの解決策を与えることができます。私は新しいインスタンスでクラスをロードしているので、nullだけになります。誰でもこのことで私を導くことができます
は、new演算子を使用し、あなたがそれを必要とする特定のクラスを注入しないでください。 Spring起動アプリケーションを起動した直後に何かを実行したい場合は、 'ApplicationRunner'インタフェースを見てください。 – dunni
@dunni - 実際には、私は新しいインスタンスを作成する必要があるJavaのリフレクションを使用してクラスをロードしています。したがって、新しいインスタンスを作成し、autowired fdをnullにします。このコードは、私たちのための例のように動作します。 –
あなたの状況をよりよく反映した例を投稿してください。 – dunni