다음 링크를 참조하여 런타임에 클래스를 만들었습니다 (http://blog.javaforge.net/post/31913732423/howto-create-java-pojo-at-runtime-with-javassist). 이제 클래스 파일을 어디에서 만들지를 의미하는 생성 된 클래스를 볼 필요가 있습니까? 디스크/작업 공간에 저장할 수 있습니까?Pojo를 런타임에 생성하고 디스크에 저장 하시겠습니까?
답변
cc.toClass()
을 호출하기 직전에 cc.writeFile()
을 호출하여 생성 된 클래스의 바이트 코드가 포함 된 클래스 파일을 저장할 수 있습니다.
소스 파일을 가져 오는 것과 동일한 작업을 수행 할 수는 없지만 실제로 소스 코드를 생성하고 (적어도 메소드에 대해서는) 소스 코드를 Javassist의 CtClass
에 순서대로 전달한다고 생각할 수 있습니다 컴파일해야합니다.
이러한 코드를 사용하여 전체 클래스의 소스 코드를 생성하는 것은 어렵지 않습니다. 이러한 메소드를 연결하고 필드 선언을 추가하고 클래스 본문으로 프레임을 작성하기 만하면됩니다. 결국 소스 파일을 생성하는 것은 이미 잘 알고있는 형식으로 텍스트 파일을 작성하는 것을 의미합니다 ...
왜 그렇게하고 싶습니까? Pojos에서 파일을 만들 수 있으며,이 튜토리얼을 따라야합니다.
http://www.mkyong.com/java/how-to-write-an-object-to-file-in-java/. 그러나 필드의 내용 만 파일에 씁니다.
레코드를 파일로 작성하는 것이 유용한 일상적인 컨텍스트가 많이 있습니다. OP의 이유를 질문하는 이상한 것 같습니다. (탁월한 링크 btw - mkyong 사이트는 정말 유용합니다.) – Elemental
내 앱에서 Rapid 앱 개발 도구를 사용 중이므로 POJO를 기반으로 UI와 모델을 생성합니다. 그래서 생성 된 POJO를 작업 공간에 저장하려고했습니다. – Vinod
저자가 의미하는 바에 대해 약간 혼란 스러웠습니다. 어쩌면 나는 'class-file'이라는 단어를 느꼈을 것이다. 직렬화는 프로그래밍에서 매우 일반적인 관행이므로 의심 할 여지가 없어야합니다. 희망 OP가 도움이됩니다 :) –
Java 객체를 가져 와서 텍스트와 유사한 파일에 쓰는 과정을 직렬화라고합니다. 이 언어는 잘 지원됩니다.
이러한 기능에 대한 오라클의 설명서는 here 및 here 자습서에서 확인할 수 있습니다.
일반적으로 사용하기가 쉽고 잘 이해되며 프로그램의 한 버전이 레코드를 저장했으나 호환되지 않는 버전이로드하려고 시도했는지 감지하는 기능을 포함하여 영리한 기능을 제공합니다.
이 stack overflow question도 유용 할 것입니다.
[cc.writeFile()'] (http : //www.csg.ci.iu- tokyo.ac.jp/~chiba/javassist/html/javassist/CtClass.html#writeFile--)'cc.toClass()'를 호출하기 직전 또는 직후. 때로는 문서를 읽는 데 도움이됩니다 ... – Holger
좋아요. 그것은 효과가있다. 그러나 사람이 읽을 수있는 형식의 파일을 생성 할 수있는 방법이 있습니까? – Vinod