Java – динамическая реализация класса @ComponentJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java – динамическая реализация класса @Component

Сообщение Anonymous »

У меня есть следующий интерфейс Java
import org.springframework.stereotype.Repository;

@Repository
public interface ITest {
void testFunc();
}

И я использую интерфейс своего контроллера
@RestController()
@CrossOrigin(origins = "*")
@RequestMapping("/api/users")
public class UserController {

@Autowired
private UserService userService;

@Autowired
private ITest iTest;

@GetMapping()
public List test() {
return this.userService.getUsers();
}

@GetMapping("/test")
public String ttest() {
iTest.testFunc();
return "Hello World!";
}

}

Когда я вручную добавляю реализацию интерфейса, все работает нормально
Но я хочу добавить реализацию во время выполнения на основе конкретной конфигурации.
Это то, что я пытался сделать но не получилось, чего-то не хватает?
@SpringBootApplication
public class EcommerceApplication {

public static void main(String[] args) throws IOException, NoSuchMethodException, ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {
String s = "package com.justtech.ecommerce.db;\n" +
"\n" +
"import org.springframework.stereotype.Component;\n" +
"\n" +
"@Component\n" +
"public class Test2 implements ITest {\n" +
"\n" +
"\n" +
" @Override\n" +
" public void testFunc() {\n" +
" System.err.println(\"Hello World\");\n" +
" }\n" +
"}\n";
dynamicClass(s, "com.justtech.ecommerce.db.Test2", "Test2");
SpringApplication.run(EcommerceApplication.class, args);
}

static void dynamicClass(String sourceCode, String className, String fileName) throws IOException, NoSuchMethodException, ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {
System.err.println(System.getProperty("user.dir"));
File parent = new File(System.getProperty("user.dir"));
File sourceFile = new File(parent, fileName + ".java");
sourceFile.deleteOnExit();

FileWriter writer = new FileWriter(sourceFile);
writer.write(sourceCode);
writer.close();

JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager standardJavaFileManager = javaCompiler.getStandardFileManager(null, null, null);
File parentDir = sourceFile.getParentFile();
standardJavaFileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(parentDir));
Iterable dynamicClass = urlClassLoader.loadClass(className);

// Method formula1 = dynamicClass.getDeclaredMethod("formula1");
// formula1.invoke(dynamicClass.newInstance());
}

}


Подробнее здесь: https://stackoverflow.com/questions/793 ... dynmically
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»