오픈 소스 라이프 사이클 프레임 워크 API 공급자로서, 내재적 인 방식으로 내재적 인 디자인을 제공하여 라이프 사이클 제공 API로 사용하려고합니다. API 클라이언트에 훨씬 더 많은 편의를 가져다 줄 것입니다.자바 명령 줄에 javaagent 옵션을 지정하지 않고로드 시간 바이트 코드 변환에 대한 해결책이 있습니까?
코어 Java 응용 프로그램과 Java EE 응용 프로그램 모두의 구성을 피할 것으로 예상되지만 실제로는 Java 명령 -javaagent : $ {path} /Lifecycle.jar 옵션을 사용하여 클래스에서 자체 ClassFileTransformer를 사용 가능하게합니다. 로드 시간.
일부 검색 후 일부 확실하지 않은 길 찾기가 발견되었습니다. 우리를 요약하고 안내하기 위해 Java Guy가 필요합니다. 모두 premain VS
는- agentmain
같은 바이트 코드 변환을 수행하기 위해 다음과 같은 방법을 가지고 글래스 피쉬의 ByteCodePreprocessor으로 지정 런타임 환경과 intergration :
public byte[] preprocess(String classname, byte[] classBytes);
내 혼란 약을 방향 :
- 핵심 Java 응용 프로그램의 경우 시작 클래스의 main 메서드를 agentmain 솔루션에 맞게 수정할 수있는 것으로 보입니다. 다른 옵션이 있습니까?
- 글래스 피시와 같은 JavaEE 컨테이너를 사용하려면 ByteCodePreprocessor를 사용하여 클래스 바이트 코드를 수정할 수 있지만 몇 가지 새로운 클래스를 만들어야하지만 새 클래스 파일을 저장할 위치 나 새로운 ClassLoader를 적용 해, 클래스 파일의 전처리 중에 새롭게 작성한 클래스 파일을로드합니다. 잘
(EntityManager의 인터페이스없이 JPA와 매우 가까운, 대부분 지금은 단지 주석과 CallbackContext 인터페이스와 LifecycleEvent 인터페이스입니다 메타 중심의 스타일을 따를 것이다. BTW 라이프 사이클 API)
해결책으로 답변을 표시했지만 기본적으로 제공되는 [javassist] (http://www.csg.ci.iu-tokyo.ac.jp/~chiba/javassist/)를 살펴볼 수도 있습니다. 클래스 바이트 조작 및 추가 java 문을 클래스, 생성자 및 메소드에 주입합니다. 실제로 그것을 보시려면 [간단한 플러그인 프레임 워크] (https://github.com/RovoMe/PluginApplication/blob/master/PluginFramework/PluginCore/src/main/java/at/rovo/core/)를 살펴보십시오. classloader/InjectionLoaderStrategyDecorator.java) 나는 대학 과정을 위해 썼다. –