spring core proxy : cglib
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
package com.example.proxy.cglib;
|
||||
|
||||
import com.example.proxy.cglib.code.TimeMethodInterceptor;
|
||||
import com.example.proxy.common.service.ConcreteService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.cglib.proxy.Enhancer;
|
||||
|
||||
@Slf4j
|
||||
public class CglibTest {
|
||||
|
||||
@Test
|
||||
void cglib() {
|
||||
ConcreteService target = new ConcreteService();
|
||||
|
||||
Enhancer enhancer = new Enhancer();
|
||||
enhancer.setSuperclass(ConcreteService.class);
|
||||
enhancer.setCallback(new TimeMethodInterceptor(target));
|
||||
ConcreteService proxy = (ConcreteService) enhancer.create();
|
||||
|
||||
log.info("targetClass={}", target.getClass());
|
||||
log.info("proxyClass={}", proxy.getClass());
|
||||
|
||||
proxy.call();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.example.proxy.cglib.code;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.cglib.proxy.MethodInterceptor;
|
||||
import org.springframework.cglib.proxy.MethodProxy;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
@Slf4j
|
||||
public class TimeMethodInterceptor implements MethodInterceptor {
|
||||
|
||||
private final Object target;
|
||||
|
||||
public TimeMethodInterceptor(Object target) {
|
||||
this.target = target;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
|
||||
log.info("TimeProxy 실행");
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
Object result = methodProxy.invoke(target, args);
|
||||
|
||||
long endTime = System.currentTimeMillis();
|
||||
|
||||
long resultTime = endTime - startTime;
|
||||
log.info("TimeProxy 종료 resultTime={}", resultTime);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.example.proxy.common.service;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class ConcreteService {
|
||||
|
||||
public void call() {
|
||||
log.info("ConcreteService 호출");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.example.proxy.common.service;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class ServiceImpl implements ServiceInterface {
|
||||
@Override
|
||||
public void save() {
|
||||
log.info("save 호출");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void find() {
|
||||
log.info("find 호출");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.example.proxy.common.service;
|
||||
|
||||
public interface ServiceInterface {
|
||||
void save();
|
||||
void find();
|
||||
}
|
||||
Reference in New Issue
Block a user