Ответы на следующие вопросы объясняют, почему это невозможно в конфигурации Spring AOP на основе аннотаций
Пружинная загрузка поддерживает конфигурации на основе xml, и требование может быть достигнуто как следует.
Предполагая, что мы должны перехватить все вызовы методов в базовом пакете com.app.service
Есть запись в resources / application.properties.
base.package=com.app.service
Аспект Записать вызовы метода в базовый пакет можно следующим образом:
package com.app.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogAspect {
Logger log = LoggerFactory.getLogger(LogAspect.class);
public Object logAllMethods(ProceedingJoinPoint pjp) throws Throwable {
log.info("Log before method call");
try {
return pjp.proceed();
}finally {
log.info("Log after method call");
}
}
}
Конфигурацию AOP можно определить следующим образом.
Файл: resources / aop-application-context. xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="logAspect" class="com.app.aspect.LogAspect"></bean>
<aop:config>
<aop:aspect id="logallaspect" ref="logAspect" >
<!-- @Around -->
<aop:pointcut id="logAllMethodsAround" expression="within(${base.package}..*)" />
<aop:around method="logAllMethods" pointcut-ref="logAllMethodsAround" />
</aop:aspect>
</aop:config>
</beans>
Обратите внимание, что выражение pointcut создается с записью application.properties.
Помните чтобы загрузить aop-application-context. xml следующим образом
@SpringBootApplication
@ImportResource("classpath:aop-application-context.xml")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Приведенный выше код сообщит обо всех допустимых вызовах методов Spring bean-компонентов в пределах определенного базового пакета и зарегистрирует их.
Надеюсь, это поможет.