利用AOP实现注解
个人见解:使用aop最大的好处是不侵入业务代码,就可以在方法执行前或者执行后来实现某些功能,比如日志打印,权限处理等等。正是因为不侵入代码的特性,我们不建议利用aop去截断请求(request),返回包含错误信息的响应(response)。其实我之前有这么做过,自定义权限注解,用户没有权限的话,直接返回没有权限的错误信息(response),功能上可以实现,虽然给我抛异常了,有代码洁癖的我就只能使用拦截器的方法实现该注解了,利用拦截器实现注解将在 自定义注解实战(二) 中来介绍,本篇介绍利用aop来实现注解——当说明书来看吧。。。
自定义注解
我们先定义一个MyAnno
的注解,代码如下:
1 | @Retention(RetentionPolicy.RUNTIME) |
其中,@Target(ElementType.METHOD)
定义该注解作用在方法上,使用value()
我们在写注解@MyAnno
的时候可以直接@MyAnno("msg")
,如果你按照下面的代码来定义注解的话,
1 | public @interface MyAnno { |
那你使用注解的时候就只能@MyAnno(param = "msg")
了,不管是@MyAnno("msg")
,还是@MyAnno(param = "msg")
,括号里面都要写value的,如果你定义的注解不需要写的话,那么就在定义的时候加上 default "";
,如下:
1 | public @interface MyAnno { |
实现注解
按照上面定义完注解其实已经可以使用了,但是没什么功能,如果想让我们自定义的注解work起来,需要利用到Aspectj:
1 | @Aspect |
这时候我们可以将我们自定义的注解加在方法上了,当程序执行到该方法时,就会打印一些信息,如果targetName,methodName,你也可以做些其他的事情,比如自动打印日志,自动将日志输出到硬盘上等等。。。
补充:其实利用aop去截断request请求也是可以的(如果必须的话),利用异常来截断请求,然后设置统一异常处理,向前端返回错误信息,不过不推荐用异常来处理业务。。。