Как создать аннотацию, которая выводила бы логи для любого метода, при помощи прокси.
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);
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу приложение для пк и телефона на сокетахСейчас при открытии соединения на пк показывается его ip/порт, а на телефоне я сам указываю ip и порт...
Мне нужно в качестве задания написать простенькую программу по условиям игры "Жизнь"Все значения поля у меня хранятся в массиве булевых значений
buffer - это StringBuilder полученный из ввода пользователя(buffer
Задача чтоб, при изменении первого editText'а изменялся 2-ой, а при изменении 2-го - первый