Ответ на ваш следующий вопрос о том, как получить экземпляр объекта target , прост, если я правильно понимаю вопрос: просто используйте привязку параметра target()
.Быстрый просмотр документации AspectJ показал бы вам, например, часть о параметрах pointcut .Я действительно считаю, что это намного проще и требует меньше времени (в том числе в связи с необходимостью ждать ответов на SO), чем задавать вопросы здесь.Но в любом случае, это место, где разработчики помогают друг другу.Итак, начнем:
Несмотря на тот факт, что ваш пример кода MVCE ничего не делает с API Google, давайте просто добавим одну строку диагностического вывода, чтобы убедиться, что аспект действительно добавил параметр запроса.:
// (...)
urlConnection.connect();
// Just in order to check if the property has indeed been set in the aspect
System.out.println(urlConnection.getRequestProperty("From"));
OutputStream outputStream = urlConnection.getOutputStream();
// (...)
Затем используйте этот аспект:
package de.scrum_master.aspect;
import java.net.HttpURLConnection;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class MyAspect {
@Pointcut("call(* java.net.HttpURLConnection.connect()) && target(connection)")
public void connectMethodCall(HttpURLConnection connection) {}
@Around("connectMethodCall(connection)")
public Object onGetUrlConnection(ProceedingJoinPoint pjp, HttpURLConnection connection) throws Throwable {
connection.setRequestProperty("From", "user@example.com");
return pjp.proceed();
}
}
Или немного более компактно, если вам не требуется повторное использование указателя, потому что вы используете его только в одномсовет:
@Aspect
public class MyAspect {
@Around("call(* java.net.HttpURLConnection.connect()) && target(connection)")
public Object onGetUrlConnection(ProceedingJoinPoint pjp, HttpURLConnection connection) throws Throwable {
connection.setRequestProperty("From", "user@example.com");
return pjp.proceed();
}
}
Журнал консоли будет:
user@example.com
false : 405