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 实现。
我有以下 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 实现。