Мне нужно записать много классов в некоторые пакеты в проекте, который я не могу изменить его исходный код. Так что мне нужно решение, которое я могу указать имя пакета, и с помощью Spring aop добавить запись в классы этого пакета без их изменения, но я не знаю, как это сделать. Как я могу это сделать?Регистрация весов по имени пакета
ответ
С Spring AOP вы можете регистрировать эти классы только в том случае, если они используются в качестве весенних бобах, и даже тогда вы можете публиковать только публичные методы.
В этом аспекте в уведомлении @AspectJ (это стиль, который совместим как с «реальным AspectJ», так и с Spring AOP, читайте о разнице in the spring reference), которую вы можете использовать как в кодовых словах Spring AOP, так и в AspectJ:
@Aspect
public class LoggingAspect{
@Pointcut("execution(* com.mycompany.myproject.*.*(..))")
public void methodToLog(){
};
@Around("methodToLog()")
public Object logMethod(final ProceedingJoinPoint joinPoint) throws Throwable{
final StaticPart staticPart = joinPoint.getStaticPart();
final String sig =
"" + staticPart.getSignature() + " with args: "
+ Arrays.deepToString(joinPoint.getArgs());
System.out.println("Entering method " + sig);
final Object result = joinPoint.proceed();
System.out.println("Leaving method " + sig);
return result;
}
}
Вот глупый класс с некоторыми методами:
package com.mycompany.myproject;
public class Dummy1{
public static void main(final String[] args){
final Dummy1 dummy = new Dummy1();
dummy.doSomeStuff();
dummy.doSomeStuffWithSomeArgs("Hello", 123);
}
private void doSomeStuff(){}
public void doSomeStuffWithSomeArgs(final String firstArg,
final int secondArg){}
}
при запуске этого класса в Eclipse,/AJDT в качестве приложения Java/AspectJ, вы получите следующий результат:
Entering method void com.mycompany.myproject.Dummy1.main(String[]) with args: [[]]
Entering method void com.mycompany.myproject.Dummy1.doSomeStuff() with args: []
Leaving method void com.mycompany.myproject.Dummy1.doSomeStuff() with args: []
Entering method void com.mycompany.myproject.Dummy1.doSomeStuffWithSomeArgs(String, int) with args: [Hello, 123]
Leaving method void com.mycompany.myproject.Dummy1.doSomeStuffWithSomeArgs(String, int) with args: [Hello, 123]
Leaving method void com.mycompany.myproject.Dummy1.main(String[]) with args: [[]]
Для проверки этого в Spring AOP потребуется больше работы (основной метод подхода не будет работать, вам придется создать ApplicationContext и зарегистрировать компонент типа Dummy1, на который вы будете называть методы), поэтому я оставлю это вам, но я уверен, что вызов частного метода не будет зарегистрирован.
Если вы загружаете SpringSource Tool Suite, вы получаете отличные инструменты для визуализации и тестирования аспект. Вы также должны прочитать AspectJ book, даже если вы хотите использовать Spring AOP. Это отличная книга.
BTW: вы, очевидно, захотите использовать настоящий регистратор, а не system.out. Вы можете определить один для каждого аспекта или (только с реальным аспектом j), вы можете представить его как статический член в целевом классе, чтобы получить ведение журнала за класс. Убийственная особенность AspectJ, на мой взгляд.
- 1. Регистрация сценария пакета SSIS
- 2. Выполнение задачи пакета по имени пакета для хранимых пакетов Sql
- 3. смена имени пакета обратно (пакет по умолчанию)?
- 4. Фильтр журналов монитора монитора по имени пакета
- 5. Узнать идентификатор запущенного процесса по имени пакета
- 6. сканирования Resteasy ресурсов по имени пакета
- 7. Регистрация по умолчанию с именем регистрация
- 8. Изменение имени пакета
- 9. Переименование имени пакета проекта
- 10. Удаление имени пакета Eclipse
- 11. Изменения имени пакета
- 12. изменение имени андроидного пакета
- 13. Javadoc без имени пакета
- 14. Регистрация имени пользователя в log4j
- 15. Sql Регистрация заявления Извлечения имени
- 16. Регистрация имени хоста в CXF
- 17. Импорт пакета без имени Java
- 18. Perl требует явного имени пакета
- 19. Чтение имени файла пакета SSIS изнутри пакета (развертывание пакета)
- 20. не удалось отформатировать xaxis с использованием пакета весов.
- 21. package-info.java для сканирования компонентов весов
- 22. Обработка пакетной партии весов
- 23. MSV1_0 Регистрация пакета для проверки подлинности
- 24. KeystoneJS Регистрация по запросу Rest
- 25. Регулировка весов нейронных сетей по пользовательским рейтингам
- 26. Повторные попытки и советы по интеграции весов
- 27. использовать xtile по году с использованием весов
- 28. Запуск событий, которые произошли в android по определенному имени пакета
- 29. Найти другие приложения по имени, а не имя пакета
- 30. C# HTML маневренность пакета получить элементы по имени класса