Предположим, что у меня есть класс с именем MyServlet
, целью которого является ответ на запрос пользователя:
@Component
public class MyServlet
{
public void accept(String clientName, int clientID)
{
System.out.println("Processing client:" + clientName + " with ID: " + clientID);
}
}
Вообще говоря, обслуживание запроса пользователя может быть чем-то, что мы хотим зарегистрировать, прежде чем пытаться отлаживать наше приложение. Поэтому мне бы очень хотелось, чтобы это поведение происходило прозрачно до того, как accept()
когда-либо будет вызвано. Для этого человека класс Helper
может предоставить функциональность регистрации, которую мы украсим @Before
:
@Aspect
@Component
@EnableAspectJAutoProxy
public class Helper
{
@Before("execution(public void show())")
public void log()
{
System.out.println("Logging data...");
}
}
Но для меня было бы очень полезно иметь возможность получить информацию, предоставленную accept()
(в данном случае String
и int
), и передать ее в log()
, так как это позволило бы мне точно зарегистрировать пользователя и его идентификатор. в любое хранилище журналов, которое я использую. Как я могу этого добиться?
@EnableAspectJAutoProxy
должен быть в отдельном классе@Configuration
, а не в@Component
. (2) Ваш аспект перехватываетshow()
, но ваш пример метода называетсяaccept(String, int)
. Поэтому я смущен тем, чего вы хотите достичь. Код не говорит сам за себя. Поэтому, пожалуйста, обновите вопрос, а затем сообщите нам, комментируя здесь. - person kriegaex   schedule 28.09.2020