[Java]Annotation元数据的几个应用
下面是结合Spring的自动Log/鉴权/国际化应用:
public interface SessionService extends Service
{
@Anonymous //允许未登录用户调用
@OperationLog //自动log
@Name(zh = "登录")
public String login(
@Name(en="user",zh = "用户")String user,
@OperationLog(false)String password); //不log密码
@OperationLog
@Name(zh="注销")
public void logout();
@Anonymous用于鉴权,允许匿名访问。通过ThreadLocal的变量保存当前用户的Session信息。
@OperationLog 用于标记是否自动Log, 可以作用于类、方法、参数
@Name用于i18n国际化支持。Java里面常见的国际化解决方法是.properties文件,个人认为这个方案不好,适合大型项目开发。小项目中这个标记一下足矣。如果要添加一种语言,只要在@Name中多一个参数,利用Eclipse的reference很容易知道有哪些地方要翻译。
同样@Name还可以加在Bean上,自动构造多语言的Table/List,方便之极。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
附上我的I18nUtil工具类:
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
元数据的结构似乎有些简单,有时候要加很多@Name,@Tip,@Help好像没办法一个Tag搞定。
另外,还可以通过Annotation加上验证、输入界面描述,等等。程序很容易自动化,再多的画面也用不了多少代码。
Jdk5.0提供了这么好用的原数据机制,你有什么好的用法呢?
转载于:https://www.cnblogs.com/steeven/archive/2005/07/28/201684.html
[Java]Annotation元数据的几个应用相关推荐
- Java Annotation(注解)使用教程
Java Annotation(注解)使用教程 1 什么是注解 2 注解的使用语法 2.1 内置注解介绍以及使用 @Override @Deprecated @SuppressWarnings @Sa ...
- Java Annotation手册
版权声明:本文可以自由转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 作者:cleverpig(作者的Blog: http://blog.matrix.org.cn/page/cle ...
- JAVA的元数据注释
JAVA元数据注释初探 JAVA的元数据功能是JDK1.5才开始支持的,以前都没有,正因为是新支持的,所以有关于它的介绍挺少,用处也不太多,最近发现很多框架都可以把它用来配置一些东西,以代替以前比较复 ...
- Java Annotation Processing 概述
文章目录 JAVA ANNOTATION PROCESSING 引言 代码实现 annotation-processor 实现一个 `Processor` 创建 `AbstractProcessor` ...
- Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules
Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules ...
- Java Annotation的RetentionPolicy介绍
Java Annotation对应的Retention有3种,在RetentionPolicy中定义,有3种: SOURCE. 注解保留在源代码中,但是编译的时候会被编译器所丢弃.比如@Overrid ...
- Java Annotation
为什么80%的码农都做不了架构师?>>> 第1部分 Annotation架构 先看看Annotation的架构图: 从中,我们可以看出: (01) 1个Annotation 和 ...
- java annotation应用_Java Annotation高级应用
前言: 在此行文<java annotation高级应用>,具体实例化解释annotation和annotation processing tool(APT)的使用.望能对各位的有所帮助. ...
- Java Annotation认知(包括框架图、详细介绍、示例说明)
摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...
最新文章
- 团队作业5-测试与发布(AIpha版本)
- 一些解密必备知识(2)- 基础篇03|解密系列
- 040_Unicode对照表六
- python基本输入输出函数有_新手学Python,输入输出函数、赋值语句常见5个错误,弄懂即过关...
- C语言——找出矩阵最大值
- 【C语言】判断学生成绩等级
- git push 报错git: push-u is not a git command. See 'git --help'.
- It#39;s about trust
- Pygame实现”走四棋儿“双人对战小游戏
- 心灵鸡汤——人生哲理
- [除一波并查集和贪心的草]
- 【数据结构(C语言版)严蔚敏 第一章 绪论】
- 洛谷 P1035 级数求和【二分||枚举】
- EMC设计经典15问
- android手机只有三星采用实体键,三星新配件:你终于可以体面地使用实体全键盘了...
- 计算机临床医学自动化哪个好,这五个专业待遇高,就业好,但是很难学,挂科风险大,选择要慎重...
- iastora怎么改成ahci_WIN7系统硬盘IDE模式转AHCI模式
- springboot整合redis报错org.springframework.beans.factory.UnsatisfiedDependencyException
- 获取移动端ip的方法
- vmware虚拟机实现两台电脑远程桌面连接
热门文章
- [NOTE] WindowsLinux常用环境变量
- OpenFoam2.4.0 cannot find input file: `contrib/dist/mofed/debian/changelog解决方案
- tf记录 之 tf.boolean_mask函数
- c++ primer 5th 习题11.14自己编写的答案
- go语言1.4版本将支持面向android开发,[翻译]Go语言1.4版本将支持面向Android开发
- python算程序员吗_我算是优秀的程序员吗?
- Java线程之守护线程(Daemon)
- 使用Maven管理Eclipse Java项目(多modules编译)
- linux 查看cpu和磁盘使用情况
- 信息安全风险评估实施