내 라이브러리 코드에서 나중에 Class.forName()
을 사용하여 인스턴스를 생성하기 위해 JAXB를 사용하여 XML 파일에서 클래스 이름을로드합니다. Class.forName()을 사용하여 클래스를로드하는 다른 방법이 있습니까?
public void libraryMethod() throws Exception {
List<String> classNames = loadClassNamesFromXML();
for (String className : classNames) {
Class.forName(className).newInstance().doThings();
}
}
지금, 어떤 사용자가 응용 프로그램을 구성은 OSGi를 사용하고, 그들이 내 XML 구조를 사용하여 구성한 클래스는 다른 클래스 로더 내 라이브러리를로드 : 가상의 예는 사건을 설명하기 위해. 클래스를 찾을 수 없으므로로드가 실패 할 수 있습니다.
더 많은 신뢰할 수있는 방법으로 이러한 클래스를로드 할 수 있습니까? 또는이 인스턴스를 구성하는 다른 방법이 있습니까? 나는이 결과 제안을 열려있어 :
public void libraryMethod() throws Exception {
// Spring does things like this:
List<SomeType> instances = loadInstancesFromXML();
for (SomeType instance : instances) {
instance.doThings();
}
}
일부 제약 : 도서관 관점에서
- 을, 그 인스턴스의 수명주기는 중요하지 않습니다. 사용자 (사용자)가있는 경우 내 라이브러리는 알 수 없습니다.
- 저는이 라이브러리에서 간단하게 작업하기를 원하므로 Spring과 같은 구성 프레임 워크에 대한 외부 종속성을 피하기를 원합니다. 따라서 표준 JDK 6+ 배포판으로 얻을 수있는 솔루션에만 관심이 있습니다.
- 저는 간단한 XML 구성 파일을 유지하고 싶습니다 (XML 구조에 대한 약간의 수정은 괜찮습니다).
당신은 해결하려고하는 실제 문제를 보여주지 않고 이미 아주 특별한 해결책을 가지고 있습니다. xml 구성에서 무엇을하는지 설명하고 패키지를 가져 오지 않고 다른 번들의 클래스를로드해야하는 이유는 무엇입니까? –
@ChristianSchneider : 도서관 ([jOOQ] (http://www.jooq.org))을 작성합니다. 임의의 사용자 패키지를 가져올 수는 없지만 라이브러리 사용자가 내 라이브러리에'SomeType' 구현을 삽입 할 수있게하고 싶습니다. 스프링을 사용하면 그러한 구현을 쉽게 삽입 할 수 있지만 내 라이브러리가 스프링 자체에 "많이"종속 될 수 있음을 의미합니다. –
질문을하기 전에 조사를 해보십시오. (게으른 시작) – Pawan