欢送拜访我的GitHub
这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
- 本篇是《quarkus依赖注入》系列的第十二篇,持续学习拦截器的另一个高级个性:禁用类级别拦截器
- 本篇由以下内容形成
- 编码验证类拦截器和办法拦截器的叠加成果
- 用注解<font color="blue">NoClassInterceptors</font>使类拦截器生效
- 总的来说,本篇内容非常简单,就是说分明NoClassInterceptors注解用在哪里,怎么用,能够轻松愉快的浏览
类拦截器和办法拦截器的叠加成果
- 接下来进行编码,看看作用在类上和办法上的两个拦截器的叠加成果,要新建的文件清单如下
- TrackClass.java:定义类级别的拦截器
- TrackClassInterceptor.java:拦截器TrackClass的性能实现
- TrackMethod.java:办法级别的拦截器
- TrackMethodInterceptor.java:拦截器TrackMethod的性能实现
- ExcludeInterceptorDemo.java:一般的bean,用TrackClass润饰其类,用TrackMethod润饰其test1办法
- ExcludeInterceptorTest.java:单元测试类,运行ExcludeInterceptorDemo的办法,察看拦挡成果
- 以下是每个文件的具体内容
- 第一个拦截器<font color="blue">TrackClass</font>,用来润饰类,对类的每个办法都有拦挡成果
@InterceptorBinding@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface TrackClass {}
- TrackClass的拦挡性能实现类TrackClassInterceptor
@TrackClass@Interceptorpublic class TrackClassInterceptor { @AroundInvoke Object execute(InvocationContext context) throws Exception { Log.info("from TrackClass"); return context.proceed(); }}
- 第二个拦截器<font color="blue">TrackMethod</font>,用来润饰办法,只对被润饰的办法有拦挡成果
@InterceptorBinding@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface TrackMethod {}
- TrackMethod的拦挡性能实现类TrackMethodInterceptor
@TrackMethod@Interceptorpublic class TrackMethodInterceptor { @AroundInvoke Object execute(InvocationContext context) throws Exception { Log.info("from TrackMethod"); return context.proceed(); }}
- 为了演示拦截器的成果,创立一个bean,如下所示,TrackClass润饰在类下面,所以test0和test1办法都会被TrackClassInterceptor拦挡,另外,test1办法还会被TrackMethodInterceptor,也就是说两个拦截器都会拦挡test1办法
@ApplicationScoped@TrackClasspublic class ExcludeInterceptorDemo { public void test0() { Log.info("from test0"); } @TrackMethod public void test1() { Log.info("from test1"); }}
- 用单元测试类验证成果
@QuarkusTestpublic class ExcludeInterceptorTest { @Inject ExcludeInterceptorDemo excludeInterceptorDemo; @Test public void test() { excludeInterceptorDemo.test0(); Log.info("*****************************"); excludeInterceptorDemo.test1(); }}
- 运行成果如下,可见test0被类拦截器拦挡,而test1先后被类拦截器和办法拦截器拦挡
- 当然了,以上一切都是合乎预期的,并没有什么问题
用注解<font color="blue">NoClassInterceptors</font>使类拦截器生效
- 假如遇到了某些抵触(例如和数据库、IO相干等),导致TrackClassInterceptor和TrackMethodInterceptor两个拦截器不能同时对test1办法进行拦挡,只能保留TrackMethodInterceptor
- 此时,能够用注解<font color="blue">NoClassInterceptors</font>润饰test1办法,如下图红框所示,这样类拦截器TrackClassInterceptor就会生效,只剩下TrackMethodInterceptor能够失常工作
<img src="https://typora-pictures-1253575040.cos.ap-guangzhou.myqcloud.com/image-20220502192040472.png" alt="image-20220502192040472" style="zoom:50%;" />
- 再次执行单元测试,成果如下图,可见类拦截器TrackClassInterceptor不再拦挡被NoClassInterceptors润饰的test1办法
<img src="https://typora-pictures-1253575040.cos.ap-guangzhou.myqcloud.com/image-20220502192714034.png" alt="image-20220502192714034" style="zoom:67%;" />
NoClassInterceptors的影响范畴
- 回顾类拦截器TrackClassInterceptor,如下图红框,可见其拦挡办法有注解<font color="blue">AroundInvoke</font>润饰
<img src="https://typora-pictures-1253575040.cos.ap-guangzhou.myqcloud.com/image-20220502193918403.png" alt="image-20220502193918403" style="zoom:50%;" />
- 而NoClassInterceptors的作用,就是针对有注解<font color="blue">AroundInvoke</font>润饰的办法,使他们生效
- 除了AroundInvoke,NoClassInterceptors还针对<font color="blue">AroundConstruct</font>润饰的办法,使他们生效
- 至此,拦截器的高级个性曾经全副学习和实际实现,心愿能给您提供一些参考,助您设计出更欠缺的拦截器
源码下载
- 本篇实战的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos)
名称 | 链接 | 备注 |
---|---|---|
我的项目主页 | https://github.com/zq2599/blog_demos | 该我的项目在GitHub上的主页 |
git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该我的项目源码的仓库地址,https协定 |
git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该我的项目源码的仓库地址,ssh协定 |
- 这个git我的项目中有多个文件夹,本次实战的源码在<font color="blue">quarkus-tutorials</font>文件夹下,如下图红框
<img src="https://typora-pictures-1253575040.cos.ap-guangzhou.myqcloud.com/image-20220312091203116-20220502192937218.png" alt="image-20220312091203116" style="zoom: 80%;" /> - <font color="blue">quarkus-tutorials</font>是个父工程,外面有多个module,本篇实战的module是<font color="red">basic-di</font>,如下图红框
<img src="https://typora-pictures-1253575040.cos.ap-guangzhou.myqcloud.com/image-20220312091404031-20220502192937321.png" alt="image-20220312091404031" style="zoom:80%;" />
欢送关注思否:程序员欣宸
学习路上,你不孤独,欣宸原创一路相伴...