文档章节

java 注解

Lbj虞
 Lbj虞
发布于 2017/03/16 22:23
字数 389
阅读 53
收藏 0

java 1.5开始有了注解,本质上就是一个标示,用于代码间解耦合 jdk中原生(java原生注解)注解

@Overrride(重写父类中的方法)

@SuppressWarnings(消除警告)

@Deprecate(声明方法已经过时)

元注解,用来修饰描述其他注解(注解的注解)

元注解有4个

@Target //标示注解的作用域(type(类),filed(字段),method(方法)....)

@Retention //标示注解的生命周期 (source(存在于java文件),class(存在于java文件和class文件),runtime(代码运行时也存在,可以影响代码逻辑))

@Documented //标示注解是否可以生成java文档

@Inherited //标示注解是否可以被子类继承

自定义注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Msg {

	String default_str = "mgs";
	
	String msg() default default_str;
	
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface TableFiled {

	String tablefiled ="這個是表裡面沒有的字段";
	
	String getTbaleFiled() default tablefiled;
	
}



@Msg(msg="this is test")
public class AnnotationTest {

	@TableFiled(getTbaleFiled="ceshi---name")
	private String name;
	
	@TableFiled(getTbaleFiled="ceshi---age")
	private String age;
	
	
	private String address;
	
	public String getName() {
		return name;
	}


	public String getAge() {
		return age;
	}


	public String getAddress() {
		return address;
	}


	public void setName(String name) {
		this.name = name;
	}


	public void setAge(String age) {
		this.age = age;
	}


	public void setAddress(String address) {
		this.address = address;
	}
	


        //mian方法简单的解析,真实项目中,会有与注解对应的注解解析器
	public static void main(String[] mgs){
		AnnotationTest test = new AnnotationTest();
		Msg msgs = (Msg)test.getClass().getAnnotation(Msg.class);
		
		System.out.println(msgs.msg());
			
		Field[]  fields =test.getClass().getDeclaredFields();
		
		Arrays.asList(fields).forEach( f ->{
			TableFiled tableFiled = f.getAnnotation(TableFiled.class);
			if(!StringUtils.isEmpty(tableFiled)){
				System.out.println(tableFiled.getTbaleFiled());
			}
			
		});
	}
	
}

控制台输出
this is test
ceshi---name
ceshi---age


所有的注解都会默认是 public interface Annotation 接口的子类,就想所有java类都会是Object的子类一样

© 著作权归作者所有

Lbj虞
粉丝 5
博文 30
码字总数 20298
作品 0
南京
程序员
私信 提问

暂无文章

使用navicat连接mysql8.0出现1251异常提示

如标题所示,出现如下图场景: 解决方案: 使用管理员权限打开cmd执行以下命令: use mysql alter user 'root'@'localhost' modified with mysql_native_password by 'root' flush privileg......

貔貅叔
10分钟前
0
0
原子操作组合与线程安全

除了操作原子性之外,还有一个比较容易引起线程不安全的原因:安全方法组合。使用多个线程安全的方法组合成一个方法,也有可能导致线程不安全的情况出现。 以ConcurrentHashMap类为例,Concu...

八音弦
10分钟前
0
0
耦合的形式(对以往思路的纠正)

耦合的形式 不透明耦合(或者叫浑浊耦合) 部件A直接驱动部件C,C对A不透明 透明耦合 部件A驱动代理B,代理B驱动部件C,C对A透明 纠正 曾经我将耦合的形式区分为:不透明耦合,单边透明耦合,...

wanxiangming
11分钟前
0
0
bash:yum:command not found 解决办法

最近在学rhel7,不知道怎么回事,今天突然yum不能用了, 提示: bash:yum:command not found 在度娘搜了半天,真不好说啥了. 自己研究了半天 步骤如下 第一步: http://mirrors.163.com/cen...

寰宇01
14分钟前
1
0
弘康人寿基于 RocketMQ 构建微服务边界总线的实践

随着互联网+和平台化战略的兴起,各个行业的 IT 系统都在向互联网架构发展,涉及的主要技术包括微服务、消息和弹性计算等,采用微服务架构实现服务高内聚、低耦合,通过异步消息完成交易快速...

阿里云官方博客
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部