AOP 仅适用于 @Autowired 注解

AOP works only with @Autowired annotation

我有以下 spring 控制器代码:

@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");
    }

}

它不起作用,"Logging User" 消息未显示(甚至 UserService 对象在控制器中实例化 class)。但是,当我们将 @Autowired 注释添加到控制器中定义的 UserService 时,它​​起作用了!

@Autowired
UserService user = new UserService();

谁能解释一下?

Spring AOP 允许在 Spring bean 上使用 AOP,而不是在随机对象上。它基于代理:Spring 不是注入 bean 的实际实现,而是注入包装实际实现的代理,并调用方面 before/after 调用包装的 bean 实现。

Documentation