Использование AOP Я знаю, используя java 8 и pointcut, теперь можно получить имена параметров метода методов через AOP.Получить имя объекта ответа через AOP
Мой вопрос: возможно ли получить имя возвращаемого объекта?
Update - Добавление кода Пример:
Я пытаюсь войти имя объекта возвращается из метода
/**
* Log the return value of all methods in the package service.impl
* @param pjp
* @param returnValue
*/
@AfterReturning(pointcut = "execution(public * com.bla.core.service.impl.*.*(..))", returning = "returnValue")
public void debugAfter(JoinPoint pjp, Object returnValue) {
if (logger.isDebugEnabled()) {
logger.debug(getAuditEndMessage(pjp, returnValue));
}
}
private String getAuditEndMessage(JoinPoint joinPoint, Object returnValue) {
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getSimpleName();
//Assuming every object has the toString method overriden
//In reality there is more logic than this
String returnValueStr = String.valueOf(returnValue);
String returnValueObjectName = //Trying to find some way of finding this value
//Ex: "[End][CategoryServiceImpl][getCategory]Ouput: [category=[id=1][name=Test Category][description=Test Description]]
String returnStr = "[End][" + className + "][" + methodName + "]Ouput: [" + returnValueObjectName + "=" + returnValueStr + "]"
return returnStr;
}
Так что, если у меня был метод:
public ExampleCategory getCategory(int categoryId){
ExampleCategory category = exampleCategoryDao.read(categoryId);
return category;
}
Я хочу, чтобы строка вывода содержала имя возвращаемого объекта:
[Конец] [CategoryServiceImpl] [getCategory] Ouput: [категория = [ID = 1] [имя = Test Category] [Описание = Тест Описание]]
я могу получить имена входных параметров с новая функциональность java 8, но я не знаю, как это сделать с возвращаемым значением.
Update 2:
После ввода все это, я понял, что, если это возможно, также может быть странные случаи, как:
public ExampleCategory getCategory(int categoryId){
return exampleCategoryDao.read(categoryId);
}
Я мог бы просто напечатать возвращающееся имя класса в этих случаях. Я все равно хотел бы знать, можно ли делать то, о чем я прошу.
(Возвращенные) объекты не имеют имен, только члены класса или локальные переменные. Что такое ваш прецедент? Пожалуйста, покажите код и опишите, чего вы действительно хотите достичь и почему. – kriegaex
Объекты не имеют имен. Неясно, что вы спрашиваете. – EJP
Я думаю, что эта идея, может быть, слишком сложна. Почему бы просто не пощелкать метод 'toString()' в возвращаемой переменной и использовать это в журнале аудита? – Brad