복붙노트

[SPRING] 런타임에 클래스를로드하는 동안 Bean을 만들 수 없습니다.

SPRING

런타임에 클래스를로드하는 동안 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();

}

}

내가 언급했듯이 이들은 서로 다른 두 가지 프로젝트입니다. 따라서 Main 클래스를 사용하여 첫 번째 프로젝트를 실행하면 다음과 같이 표시됩니다.

어떻게 bean을 생성 할 수 있습니까?

해결법

  1. ==============================

    1.이는이 클래스를 찾을 수 없기 때문에 구성 요소 검사 구성에서 빈이있는 위치에 패키지를 선언해야합니다.

    이는이 클래스를 찾을 수 없기 때문에 구성 요소 검사 구성에서 빈이있는 위치에 패키지를 선언해야합니다.

  2. from https://stackoverflow.com/questions/45115102/how-to-create-a-bean-at-runtime-at-the-time-while-using-class-loading-java-refl by cc-by-sa and MIT license