AOPを使用する私はJava 8とポイントカットを使用していることを知っているので、メソッドメソッドパラメータの名前をAOPで取得できるようになりました。AOPを使用して応答オブジェクトの名前を取得
私の質問は、返されるオブジェクトの名前を取得することは可能ですか?
更新 - コード例を追加:
public ExampleCategory getCategory(int categoryId){
ExampleCategory category = exampleCategoryDao.read(categoryId);
return category;
}
:
私はメソッドを持っていたので、もし方法
/**
* 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;
}
から返されるオブジェクトの名前をログに記録しようとしています
返されるオブジェクトの名前が出力文字列に含まれます。
[終了] [CategoryServiceImpl] [のgetCategory]出力リレー:[カテゴリ = [ID = 1] [名=テストカテゴリ] [説明=テストの説明]]
Iは、入力パラメータの名前とを得ることができます新しいJava 8の機能は、私は戻り値でこれを行う方法を知らない。
アップデート2:
このすべてを入力した後、私はこれが可能である場合、また、のような奇妙な例があるかもしれないことに気づい:私はちょうど戻って、クラス名を印刷することができ
public ExampleCategory getCategory(int categoryId){
return exampleCategoryDao.read(categoryId);
}
そのような場合に。私はまだ私が上記で求めていることをすることが可能かどうかを知りたいです。
(返される)オブジェクトには名前はなく、クラスメンバーまたはローカル変数のみが名前を持ちません。あなたのユースケースは何ですか?いくつかのコードを示して、実際に達成したいこととその理由を説明してください。 – kriegaex
オブジェクトには名前がありません。あなたの尋ねるものは不明です。 – EJP
私はこの考え方が少し複雑すぎると思っています。戻り値変数に 'toString()'メソッドをスラップして、それを監査ログに使用するのはなぜですか? – Brad