다음과 같은 특징이 있습니다.메소드에 매개 변수를 추가 하시겠습니까?
@Around("somePublicMethod()")
public Object doAction(ProceedingJoinPoint call) throws Throwable {
SomeObject client = null;
Object result = null;
try
{
client = someDao.getResult();
Object[] allArgs = call.getArgs();
allArgs[allArgs.length-1] = client;
// Do the call, passing in the managed SiperianClientWrapper
result = call.proceed(allArgs);
}
catch(Exception ex)
{
throw ex;
}
다음과 같은 서비스 방법이 있습니다. 이 방법은 위의 요격에 의해 가로 채어진다.
public SomeEntity getEntities(String name, String pwd, SomeObject client){
//some logic
}
위의 방법은 아래와 같이 호출된다. 무엇 인 양태
someService.getEntities("name","pwd",null);
는 SomeObject의 널 갖고 널 일부 실제 값으로 대체된다.
제 질문은 null을 매개 변수 값으로 전달하는 대신, Aspect에서 Reflection을 사용하여 추가 매개 변수를 추가 할 수 있습니까? 내 경우에는 SomeObject 매개 변수를 동적으로 추가 할 수 있습니까?
그래서 마지막으로 서비스를 someService.getEntities("name","pwd");
으로 호출해야하며 SomeObject는 Aspect에 의해 동적으로 추가됩니까?
감사합니다. 자바 파일이
public SomeEntity getEntities(String name, String pwd, SomeObject client){
등의 방법 선언으로 선언 된 경우
Sotirios, 답변을 주셔서 감사합니다. 3 대신에 2 개의 인수를 받아들이도록 getEntities 메소드의 서명을 변경합니다. 이제 여분의 메서드 매개 변수를 하나 더 추가 할 수 있습니까? 아니면 SomeObject 런타임을 삽입 할 수있는 방법이 있습니까? – user755806
@ user755806 메소드가 컴파일됩니다. 런타임에는 서명을 변경할 수 없습니다. varargs로 메소드를 선언하면 런타임에 더 많은 인수를 전달할 수 있습니다. –