Spring Boot AOP в многомодульном проекте не выполняется до консультации - PullRequest
0 голосов
/ 08 апреля 2019

Я делаю первые шаги в Springs AOP и хотел начать с простого совета по ведению журнала. Мой проект представляет собой многомодульный проект maven со следующей структурой:

parentProject
| __aop
| __data
| __Web

Веб-модуль имеет класс обслуживания пользователя в пакете de.my.awsome.project.web.service с методом saveNewUser:

@Service
public class UserService {
...
    public MdUser saveNewUser(UserModel user) {
        MdUser newUser = this.save(user);
        createGroupMembership(user, newUser);
        return newUser;
    }
}

Метод работает, как и ожидалось, поэтому не беспокойтесь о деталях.

Теперь я создал следующий класс в модуле aop:

@Component
@Aspect
public class LoggingAspect {

    Logger logger = Logger.getLogger(getClass());

    @Before("execution(public * de.my.awsome.project.web.service.UserService.saveNewUser(..))")
    public void newUserLog(JoinPoint joinpoint) {
        logger.info(joinpoint.getSignature() + " with user " + joinpoint.getArgs()[0]);
}

}

Я добавил зависимость для веб-модуля в pom модуля aop:

<dependency>
    <groupId>de.my.awsome.project</groupId>
    <artifactId>web</artifactId>
    <version>${project.version}</version>
</dependency>

Я даже написал ConfigurationClasse, хотя думал, что в SpringBoot этого не будет необходимости:

@Configuration
@ComponentScan(basePackages="de.fraport.bvd.mobisl.aop")
public class AspectsConfig {

}

Ожидаемый результат - лог-сообщение типа «saveNewUser with user xyz». Но метод регистрации никогда не вызывается. Что я пропустил?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Ну, ответ, который выложил @sankar, тоже не сработал, но я сам нашел решение.

Мне пришлось добавить зависимость к моему aop-модулю в pom веб-модулей, а не наоборот. Затем я добавил Import of AspectConfig в класс SpringBootApplication веб-модулей, и он заработал.

@SpringBootApplication
@Import(value= {JPAConfig.class, AspectsConfig.class})
@EnableAspectJAutoProxy
public class WebApplication {

@Autowired
private JPAConfig config;

@Autowired
private AspectsConfig aspectConfig;

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }
}
0 голосов
/ 08 апреля 2019

@ Configuration - указывает, что этот файл содержит конфигурацию Spring Bean для аспекта.

Замените @Component на @Configuration for LoggingAspect.

...