基础概念就先略过了,下面直接贴出一个简单的例子:
-
- 定义一个自定义注解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auth {
}
-
- 为这个注解定义切点实现具体逻辑(我是这样理解的)
@Aspect
@Component
public class AuthController {
@Pointcut(value = "@annotation(com.example.bootMp.annotation.Auth)")
public void pointCut(){}
@Before(value = "pointCut() && @annotation(auth)")
public void before(Auth auth){
System.out.println("======用在定义的方法之前!!=======");
}
}
-
- 验证注解是否可用
随便找一个接口,加上我们刚刚自定义的注解@Auth
@Auth
@RequestMapping("/toLogin")
public String toLogin(Model model){
model.addAttribute("msg","转向login页面");
return "Login";
}
启动项目,请求这个接口:
2020-04-26 16:08:43.238 INFO [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-04-26 16:08:43.238 INFO [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-04-26 16:08:43.254 INFO [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 16 ms
======用在定义的方法之前!!=======
Disconnected from the target VM, address: '127.0.0.1:57077', transport: 'socket'
2020-04-26 16:09:13.281 INFO [ Thread-9] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
2020-04-26 16:09:13.290 INFO [ Thread-9] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed
期望的语句输出了,测试成功!