АОП работает только с аннотацией @Autowired - PullRequest
0 голосов
/ 16 октября 2019

У меня есть следующий код контроллера пружины:

@Controller
@RequestMapping("/")
public class MainController {
    UserService user = new UserService();

    @GetMapping("/home")
    public String goFirstPage(){
        user.showUserName(new User("Mike"));
        return"firstpage";
    }

}

и следующий аспект:

@Aspect
@Component
@Order(1)
public class UserAspect {


    @Before("execution(public void com.project.aopmaven.services.UserService.showUserName(..))")
    public void logUser(){
        System.out.println("Logging User");
    }

}

Не работает, сообщение «Вход пользователя в систему» ​​не отображается (дажеобъект UserService создается в классе контроллера). Но когда мы добавляем аннотацию @Autowired к UserService, определенному в контроллере, он работает!

@Autowired
UserService user = new UserService();

Может кто-нибудь объяснить это?

1 Ответ

2 голосов
/ 16 октября 2019

Spring AOP позволяет использовать AOP на бобах Spring, а не на случайных объектах. И он основан на прокси: вместо внедрения фактической реализации компонента, Spring внедряет прокси, который оборачивает фактическую реализацию, и вызывает аспекты до / после вызова реализации упакованного компонента.

Документация

...