Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Похоже что Spring также собирается поддерживать Byte Buddy:
https://jira.spring.io/browse/SPR-8190
самый простой пример. Аннотации спринга.
Ставите над методом @transactional, а в прокси-классе создается обертка вокруг вызова.
Частый вопрос на собеседовании — сработает ли такая аннотация если вызвать метод из того же класса, где он располагается. ответ — нет, так как произойдет вызов без обертки. чтобы сработал вызов нужно сделать @Autowire класса в себя и вызвать уже через поле.
package ru.incbt.cds.api.rest.function;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author Okhonchenko Aleksander
* @since 14.02.2018
*/
@Service
public class App {
@Autowired
private App app;
@Transactional
public void transactedMethod() {
//some work with db
}
public void someMethod() {
//вызов без обертки
transactedMethod();
//вызов с магической оберткой
app.transactedMethod();
}
}MethodInterceptor handler = (obj, method , args, proxy) -> {
if(method.getName().equals("getName")){
return ((String)proxy.invokeSuper(proxy, args)).toUpperCase() ;
}
return proxy.invokeSuper(proxy, args);
};
Динамическое генерирование прокси-классов в Java