Можно ли проверять вызовы методов в JDBI DAO с помощью аспектно-ориентированного программирования?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Можно ли проверять вызовы методов в JDBI DAO с помощью аспектно-ориентированного программирования?

Сообщение Anonymous »

В основном мы используем Jdbi.onDemand с интерфейсами DAO для взаимодействия с нашими RDS.
Я пытаюсь получить представление о том, когда вызывается каждый метод DAO.
У нас есть сотни методов в десятках интерфейсов, поэтому добавление журналов для каждого вызова по отдельности непрактично.
Я надеялся использовать рекомендации AOP, основанные на аннотациях JDBI в интерфейсе методы. У нас есть совет @annotation для некоторых методов контроллера, который работает хорошо, но тот же подход не работает для методов DAO.
Я подозреваю, что это связано с тем, что и Spring AOP, и JDBI работают путем создания прокси-классов на основе интерфейса, так что JDBI может получить экземпляр и использовать его для взаимодействия с базой данных, но мой аспект не может «видеть» этот экземпляр, чтобы применить совет. Я новичок в этом деле и все еще разбираюсь в деталях.
Пример проекта на GitHub: https://github.com/Vaent/jdbi-aop-example
Пример фрагментов кода (упрощенный):

Код: Выделить всё

@Service
public class MyService {
@Autowired
private Jdbi jdbi;

public Long getCount() {
// MyDAO#getCount is invoked as expected
return jdbi.onDemand(MyDAO.class).getCount();
}
}

Код: Выделить всё

public interface MyDAO {
@SqlQuery("SELECT COUNT(*) FROM myschema.mytable")
public Long getCount();
}

Код: Выделить всё

@Aspect
@Component
public class MyAspect {
@Before("@annotation(sqlQuery)")
public void queryAdvice(SqlQuery sqlQuery) {
// When the service method is invoked, I expect this to be printed, but nothing happens
System.out.println("Executing query: " + sqlQuery.value());
}
}
Я пробовал разные типы советов, разные выражения pointcut, включая bean и выполнение, используя отдельный метод pointcut, используя пользовательскую аннотацию вместо JDBI. Кажется, ничего из того, что я пробовал, не имеет никакого значения.
Есть ли обходной путь или способ настроить аспект/интерфейс так, чтобы расширение JDBI по требованию могло взаимодействовать с AspectJ/Spring AOP/любой другой аспектно-ориентированной платформой?

Подробнее здесь: https://stackoverflow.com/questions/798 ... t-oriented
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»