Как создать аннотацию, которая выводила бы логи для любого метода, при помощи прокси.
public class Test {
@LogMethodData
public int sum(int first, int second) {
return first + second;
}}
а на выводе было что то вроде:
янв 26, 2019 5:01:42 PM com.qwerty.classboot.Test sum
Пример создания прокси через cglib.
Аннотация:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogMethodData {
}
Класс для проверки:
public class MyClass {
@LogMethodData
public String method1() {
return "this is method1";
}
public String method2() {
return "this is method2";
}
}
Пример программы:
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import org.apache.log4j.Logger;
import java.lang.annotation.Annotation;
public class App {
public static void main( String[] args ) {
MyClass myClass = (MyClass) proxyWrapper(new MyClass());
System.out.println(myClass.method1());
System.out.println(myClass.method2());
}
private static Object proxyWrapper(Object instance) {
MethodInterceptor handler = (obj, method , args, proxy) -> {
Annotation annotation = method.getAnnotation(LogMethodData.class);
if(annotation != null){
Logger logger = Logger.getLogger(instance.getClass());
logger.info(method.getName());
}
return proxy.invoke(instance, args);
};
return Enhancer.create(instance.getClass(), handler);
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости