"addon"인터페이스가 필요한 Java 프로젝트가 있습니다. 클래스가 응용 프로그램에로드 된 후 initialize()
및 shutdown()
과 같은 기본 메서드가있는 클래스 파일을로드하려고 생각했습니다. 이것을하는 방법입니까? 이 문제에 어떻게 접근합니까?Java 클래스를 포함하고 런타임 중에이를 실행하십시오.
답변
Class 클래스, 특히 forName 메서드를 살펴보면 이름으로 클래스를 참조 할 수 있습니다. 경로의 모든 클래스를 이와 같이로드 할 수 있습니다. 을 다시로드 할 수 있는지 여부는 알 수 없습니다.
동적으로로드하려는 각 클래스는 사용자 정의 AddOn
인터페이스를 구현해야하므로 initialize
및 shutdown
을 구현해야합니다.
이것은 효과가 있습니다! 이것이 올바른 방법 일지 모르겠다. 나는 피드백에 만족한다. 이 클래스는 하나의 클래스를로드하는 데에만 사용됩니다. Classfoo = Class.forName ("addonclass"); 개체 foo = null; Object [] foo2 = null; classfoo.getMethod ("initialize"). invoke (foo, foo2); – Baversjo
듣고 행복하게 작동합니다! 나 자신도 "올바른"방법에 대한 피드백에 관심이 있습니다. 나는 더 우아한 방법이 존재한다는 느낌을 가지고있다 ... – Stephan202
"나는 더 우아한 느낌이있다." 아니요, 문서화 된 올바른 방법입니다. – Jay
public class SomeClass {
static {
System.out.println("Being called with the class is loaded");
initialize();
}
static void initialize(){}
}
귀하의 질문입니까?
먼저, ClassLoader
; getClass().getClassLoader()
으로 현재의 것을 얻을 수 있지만 addon 클래스는 classpath에 있어야합니다. 아마도 addon 디렉토리를 검색하는 커스텀 클래스 로더를 생성하고 싶을 것이다.
ClassLoader
을 얻은 후에는 load a class에 사용할 수 있습니다. 그러면 Class
개체가 생깁니다. 그런 다음 반사를 사용하여 initialize()
메소드가있는 경우 해당 메소드를 호출 할 수 있습니다.
비표준 방식으로 클래스를로드하려면 클래스 로더 만 있으면됩니다. 클래스가 클래스 경로의 폴더에 ".class"파일로 존재하면 표준 클래스 로더가이를 수행합니다. 인터넷에서 클래스를 다운로드하려는 경우 사용자 정의 클래스 로더가 필요합니다. – Jay
addons를 실현하는 또 다른 좋은 방법은 java.util.Serviceloader입니다. javadocs를 살펴보면, 그들은 원리를 설명한다.
좀 더 세련된 것을 본다면, http://jpf.sourceforge.net을 시도해 볼 수 있습니다.
... JPF는 "플러그인"을 동적으로 검색하고로드하는 런타임 엔진을 제공합니다. 플러그인은 "매니페스트"를 사용하여 JPF에 대해 설명하는 구조화 된 구성 요소입니다. ...
- 1. java - 리눅스에서 명령어를 실행하십시오.
- 2. 오류가 발생하면 파일을 포함하고 실패한 함수를 다시 실행하십시오.
- 3. 레일즈에서 런타임 클래스를 생성합니다. 어떻게해야합니까?
- 4. Java Postgresql 런타임 오류
- 5. Java 프로그램에서 winzip 명령을 실행하십시오.
- 6. 표준없이 Java 프로그램을 계속 실행하십시오.
- 7. System.console 클래스로 java 코드를 실행하십시오.
- 8. 네트워크 메시지에서 사용자의 Java 메소드를 실행하십시오.
- 9. java ee | ejb3 | 런타임 디스패치
- 10. Java 런타임 라이브러리 연결 방법
- 11. JRuby에서 Java 클래스를 생성하고 Java 클래스를 사용할 수 있습니까?
- 12. 런타임에 Java 클래스를 변경하십시오.
- 13. 런타임에 Java 클래스를 컴파일하고 배포하려면 어떻게해야합니까?
- 14. Java - 여러 런타임 동시 런타임 문제 .exec() InputStreams
- 15. 런타임
- 16. "java"명령을 사용하여 .jar 파일을 실행하십시오. Centos
- 17. 백그라운드 프로세스로 java 응용 프로그램을 실행하십시오.
- 18. 샌드 박스에서 PHP를 통해 Java 프로그램을 실행하십시오.
- 19. Java 문제에서 Unix 시스템 명령을 실행하십시오.
- 20. 기존 jvm 프로세스에서 새 Java 코드를 실행하십시오.
- 21. 지금 Java EE 6 타이머를 실행하십시오.
- 22. JSP로 원격 UNIX 시스템에서 java 프로그램을 실행하십시오.
- 23. Tomcat 5.5와 Java 1.5가 설치된 Netbeans에서 Java webapp을 실행하십시오.
- 24. 런타임
- 25. 런타임
- 26. 런타임
- 27. 포함하고 페이지를 매기는 CakePHP의에서
- 28. 는 PHP 포함하고 POST
- 29. PHP는, htaccess로를 포함하고
- 30. 은 포함하고 안드로이드
동적으로 클래스를로드하거나 클래스의 초기화 동작을 정의 하시겠습니까? –
클래스를 동적으로로드합니다. – Baversjo