1. 메인의 SchoolMember.name을 바꾸기
/**
* Hello world!
*
*/
public class App {
public static void main( String[] args ){
System.out.println("SchoolMember().MebmberName() = > " + new SchoolMember().MebmberName());
}
}
public class SchoolMember {
public String MebmberName() {
return "abc";
}
}
- 결과화면
2. 새로운 프로젝에 net.bytebuddy를 불러오기
# https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy
- 런타임시 java Class들을 동적으로 만들어낼 수 있는 라이브러리
2. pom.xml 의존성 추가 (Junit은 필요없습니다.)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy -->
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.10.8</version>
</dependency>
</dependencies>
3. 변경할 함수와 이름 만들어 주기
public class SchoolNameChange {
// premain
public static void premain(String agentArgs, Instrumentation inst) {
new AgentBuilder.Default()
.type(ElementMatchers.any())
.transform(new AgentBuilder.Transformer() {
@Override
public DynamicType.Builder<?> transform(DynamicType.Builder<?> builder, TypeDescription typeDescription, ClassLoader classLoader, JavaModule module) {
return builder.method(named("memberName")).intercept(FixedValue.value("Test"));
}
}).installOn(inst);
}
}
4. pom.xml 의 빌드에 Maven jar 생성 부분 추가
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<mode>development</mode>
<url>${project.url}</url>
<key>value</key>
<!-- Manifest attribute -->
<!-- 애플리케이션 시작시 옵션으로 주기, Package 넣어주기-->
<Premain-Class>org.example.SchoolNameChange</Premain-Class>
<!-- 클래스 변경 허용 부분 -->
<Can-Redefine-Classes>true</Can-Redefine-Classes>
<Can-Retransform-Classes>true</Can-Retransform-Classes>
<!-- 클래스 변경 허용 부분 -->
<!-- Manifest attribute -->
</archive>
</configuration>
</plugin>
</plugins>
</build>
5. mvn clean package , jar 파일 생성
- tistory... .jar 파일 생성
6. 기존의 프로젝트에 VM options에 jar 파일 추가
[-javaagent:C:\Users\.....\target\tistoryBytebuddyJavaagent-1.0-SNAPSHOT.jar]
7. 실행
'[Spring]' 카테고리의 다른 글
[Spring] @AOP(Aspect Orient Programming)의 이해 (0) | 2020.03.23 |
---|---|
[Spring]Spring Validation 사용해보기 (0) | 2020.03.17 |
[Spring기초] @Autowried , @Qualifier의 이해 (0) | 2019.10.25 |
[Spring기초] Java로 Bean 만들기.(Java로 xml 대신하기) (0) | 2019.10.20 |
[Spring기초] 의존성 주입:DI(DEPENDENCY INJECTION) - 생성자Constructor DI (0) | 2019.10.14 |