`

来!认识一下强大的Annotation

    博客分类:
  • java
阅读更多

1.annotation是什么?

  1. 注释:存在与否都不会影响程序的运行,当然这个是指不涉及APT(Annotation Processing Tool)的情况下
  2. 标记:可以标记类、方法、成员变量(java 8开始可以标记类型)
  3. 补充信息:可以具体描述被标记内容的相关信息,提供验证、部署、额外的功能。
  4. 一个简单又复杂的强大技术。

2.我们身边的Annotation

  1. @Override:可以认为是一种验证,验证所标记的方法是否是父类的需要重写的方法,主要防止低级错误(例如拼写错误),它告诉编译器来验证这个方法,保证你所重写的方法是父类存在的方法。(有些人认为这是一种限定或者是控制)
  2. @Deprecated:标记这个方法已经过时。 例如:我们自己定义一个过时的方法,或者创建一个Date对象 然后调用getYear()方法
  3. Spring、Hibernate、各种MVC框架,现在都基本提供Annotation的编程方式。
    优点:简单(降低配置难度),提高开发效率(不用来回切换于代码与配置文件之间)
    缺点:在没有源码的情况下 今后维护起来比较费劲,修改代码之后大部分情况下不得不重启服务。

       
 

3.写一个简单的annotation 感官认识一下,详细介绍请关注我博客的后期文章

  1. 我们自己定义了一个CxyAnnotation
  2. 我们创建了一个成员变量name,然后标记上CxyAnnotation
  3. 我们使用反射将其信息取出来。(当然实际使用的时候会使用APT去处理,这里只做一个简单的例子)

4.因为Annotation的使用和反射息息相关,所以本例只是简单的介绍了一下annotation,如果本文受大家欢迎的话,会尽快出更详细的文章。

 

 

package com.cxy.annotation;

import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Date;

/**
 * @author cxy
 */
public class AnnotationTest
{
	@CxyAnnotation(title="名字",descript="记录用户姓名")
	public String name="";
	
	public static void main(String[] args) throws Exception
	{
		Date d=new Date();
		d.getYear(); //这个Date方法被划伤了横线 代买这个方法已经过时
		oldMethod(); //这个自定义的方法 被打上了过时方法的标记 @Deprecated
		System.out.println("====================");
		
		Annotation[] aArray=AnnotationTest.class.getField("name").getAnnotations();
		//为了演示方便这里我知道肯定会有一个CxyAnnotation在数组的第一个 所以直接取,实际工作中请使用遍历去判断
		Annotation na=aArray[0];  
		System.out.println("成员变量name的扩展信息:");
		System.out.println("name代表:"+((CxyAnnotation)na).title());
		System.out.println("name具体描述:"+((CxyAnnotation)na).descript());
	}
	
	//检查父类是否有一个这样的方法让子类重写。
	@Override
	public String toString()
	{
		return "AnnotationTest [getClass()=" + getClass() + ", hashCode()="
				+ hashCode() + ", toString()=" + super.toString() + "]";
	}

	//标记这个方法已经过时
	@Deprecated
	public static void oldMethod()
	{
		System.out.println("这个方法已经过时了");
	}
}

//自己定义的一个Annotation
@Retention(RetentionPolicy.RUNTIME) //保留注释到程序运行
@Target(ElementType.FIELD) //这个annotation是标记在field上的
@interface CxyAnnotation
{
	String title();
	String descript();
}

 

 

 

声明:

1.原创文章,转载请标明并加本文连接。

2.文章反映个人愚见,如有异议欢迎讨论指正

 

  • 大小: 35.8 KB
8
4
分享到:
评论
17 楼 seanosay 2013-03-14  
嗯 很好,学习了,一直对annotation这种方式没有过多了解
16 楼 snkcxy 2013-03-05  
kjj 写道

你的评论很到位,我知道,其实我自己也大量用了annotation,我已经把ssh的配置都annotation了,呵呵,我用的最多的是log


嗯 现在ssh基本都用annotation了 这东西有利有弊,总体来说让开发效率提高很多
15 楼 kjj 2013-03-05  
snkcxy 写道
kjj 写道
自动生成setter getter 真心无用啊

1.annotation不是光能生成get、set方法呀,配置信息,sql语句,动态装配,组装java文件、aop,能做的很多呀
2.即便是生成get、set也不是没用呀,比如你根据数据表产生model,或者在没有ide的帮助下给一个很多成员变量的类生成setter getter 都是很实用的吧?
这位朋友是没看到反射+annotion的真正价值呢?还是你的能力已经凌驾于架构师水平之上了呢?

你的评论很到位,我知道,其实我自己也大量用了annotation,我已经把ssh的配置都annotation了,呵呵,我用的最多的是log
14 楼 snkcxy 2013-03-05  
kjj 写道
自动生成setter getter 真心无用啊

1.annotation不是光能生成get、set方法呀,配置信息,sql语句,动态装配,组装java文件、aop,能做的很多呀
2.即便是生成get、set也不是没用呀,比如你根据数据表产生model,或者在没有ide的帮助下给一个很多成员变量的类生成setter getter 都是很实用的吧?
这位朋友是没看到反射+annotion的真正价值呢?还是你的能力已经凌驾于架构师水平之上了呢?
13 楼 kjj 2013-03-05  
自动生成setter getter 真心无用啊
12 楼 witcheryne 2013-03-05  
snkcxy 写道
witcheryne 写道
加油, 继续...
推荐看看 lombok 这个项目

感谢~Lombok,消除冗长java代码,看起来很不错,找时间看看


我用了快3年了,  没什么问题.

@Getter@Setter, @Data, @Log4j 注解真心方便.
11 楼 snkcxy 2013-03-05  
snkcxy 写道
《如约所致~ Annotation详细介绍》已经上线
http://snkcxy.iteye.com/blog/1821512

晕 更正一下
不叫上线(职业病) 叫发布
10 楼 snkcxy 2013-03-05  
《如约所致~ Annotation详细介绍》已经上线
http://snkcxy.iteye.com/blog/1821512
9 楼 jiangwenxian 2013-03-05  
求详细指导,楼主V587!楼主千秋万代,一统江湖!
8 楼 sdarmy 2013-03-04  
例子举的很好
7 楼 snkcxy 2013-03-04  
shishouxing 写道
很好,求更新!

感谢~ 我会抓紧时间写一篇 详细介绍  还有一篇实例应用,虽然不能涵盖annotation的强大,但是工作用 应该是足够了~
6 楼 snkcxy 2013-03-04  
witcheryne 写道
加油, 继续...
推荐看看 lombok 这个项目

感谢~Lombok,消除冗长java代码,看起来很不错,找时间看看
5 楼 shishouxing 2013-03-04  
很好,求更新!
4 楼 witcheryne 2013-03-04  
加油, 继续...
推荐看看 lombok 这个项目
3 楼 snkcxy 2013-03-04  
本人能力有限,只是将个人愚见分享给大家,抛砖引玉,如果浪费了大牛们的时间,这里表示抱歉
2 楼 snkcxy 2013-03-04  
BuN_Ny 写道
那就快来点更详细实用的东西吧!

我只能保证详细,至于实用不实用,有价值没有价值因人而异
1 楼 BuN_Ny 2013-03-04  
那就快来点更详细实用的东西吧!

相关推荐

    Annotation Based Spring MVC Basics

    在本文中,我们将深入探讨基于注解的Spring MVC基础知识,这是一种流行且强大的Java Web开发框架。首先,我们假设读者对基本的Web应用程序结构和配置文件有一定的了解,以及对Servlets有基本的认识。接下来,我们将...

    Hibernate Annotation应用

    《Hibernate Annotation应用详解》 在Java企业级开发中,Hibernate作为一个强大的对象关系映射(ORM)...在阅读和实践本文所述内容后,相信你对Hibernate Annotation会有更深的认识,进一步提升你的Java ORM开发技能。

    hibernate注解功能模拟

    3. **Reflection(反射)**:反射是Java的一项强大特性,允许运行时动态获取类的信息并操作类的对象。在Hibernate中,反射用于在运行时解析那些带有注解的类,读取注解信息,然后根据这些信息建立对象和数据库之间的...

    Eclipse开发工具介绍

    Eclipse开发工具是一种集成开发环境(IDE),提供了大量的功能和特性来帮助开发者快速高效地开发Java应用程序。下面是Eclipse开发工具的主要知识点: 1. 认识Eclipse Eclipse是一种开源的集成开发环境,起源于IBM的...

    spring mvc helloworld

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。它作为Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、用户界面和数据访问层解耦。在...

    SpringBoot框架

    总的来说,SpringBoot以其简洁的配置、强大的功能和广泛的社区支持,成为现代Java开发的首选框架。对于初学者来说,了解并掌握SpringBoot能够迅速提升开发效率,为项目的快速迭代打下坚实基础。通过上述介绍,你应该...

    java 小型环境搭建 SpringMVC

    它为开发者提供了强大的控制层组件,简化了应用程序的构建过程。本教程将详细阐述如何搭建一个基础的SpringMVC环境,以便于初学者或研究人员快速上手。 **1. 安装与配置** 首先,确保你的计算机上已经安装了Java ...

    springboot.docx

    ### Spring Boot 简介与应用 #### 一、Spring Boot 概述 ...Spring Boot 的强大之处在于其简化了复杂的Spring配置,使得开发者可以更专注于业务逻辑的开发。这对于提高开发效率和降低开发难度有着重要的意义。

    springMVC快速入门 深入分析

    SpringMVC通过@RequestBody、@ResponseBody注解以及HttpMessageConverter等机制,提供了对AJAX请求的强大支持,允许开发者以非常简洁的方式处理JSON和XML数据。 SpringMVC的配置相对灵活,可以在一个或多个配置文件...

    java 反射机制详解

    总的来说,Java 反射机制是 Java 动态性的一个重要体现,它提供了在运行时探索和操作类的能力,使得代码更加灵活,但也需要开发者对潜在的风险有足够的认识。通过合理使用反射,开发者可以构建出更强大、更适应变化...

    ArcEngine预定义的命令说明(9.1版本全集)

    ### ArcEngine预定义的命令说明(9.1版本全集) #### 引言 随着地理信息系统(GIS)技术的发展,...通过本文的介绍,希望能够帮助读者对ArcEngine 9.1有一个全面的认识,并能够在实际项目中灵活运用这些强大的工具。

    hibernate资料3

    在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作,让开发者可以更加专注于业务逻辑,而不是底层的数据存取细节。本资料包主要围绕Hibernate 3.3.2版本展开,通过一系列的...

    Axure_RP操作手册.doc

    Axure RP 是一款强大的原型设计工具,广泛应用于产品设计、用户体验设计等领域。本手册旨在帮助用户快速掌握 Axure RP 的基本操作方法,以便能够高效地创建高质量的原型。 #### 二、认识 Axure RP 操作界面 Axure ...

    基于_JFace_Text_Framework_构建全功能代码编辑器

    通过深入理解其核心特性及其背后的实现原理,开发者不仅能够更好地利用这些工具来提升自己的项目,还能对Eclipse平台有更深的认识。结合使用ANTLR等外部工具,还可以进一步增强编辑器的功能,满足更多个性化的需求。

    2011最新整理java经典代码.zip

    标题 "2011最新整理java经典代码.zip...对于初学者来说,这是一个宝贵的资源,可以帮助他们建立起对Java编程的全面认识。而对于经验丰富的开发者,这也可以作为一个参考,帮助他们在遇到特定问题时找到灵感或解决方案。

    韩顺平.循序渐进学.java.从入门到精通上半部分

    1. **Java简介**:讲解Java的历史、特点和应用领域,让学习者对Java有一个全面的认识。Java是一种跨平台、面向对象的编程语言,因其强大的稳定性和安全性在企业级应用中广泛使用。 2. **环境配置**:介绍如何在不同...

    病原微生物生物信息学.pdf

    总之,病原微生物生物信息学的发展极大地提升了我们对病原体的认识和反应能力,它不仅仅应用于基础研究领域,也在公共卫生、疾病预防和控制等方面发挥了重要的作用。随着科技的进步和数据量的增长,生物信息学方法将...

    cxf webserice 开发指南

    这段代码利用了JDK 5的注解(Annotation),@WebService和@SOAPBinding注解定义了服务接口,而@WebParam注解用于指定参数名称。 **三、CXF 对 Interceptor 拦截器的支持** CXF支持拦截器(Interceptor),这是一种...

    java_basic_examinations.rar_java pdf_java基础

    16. **注解(Annotation)**:注解提供了一种元数据,用于向编译器或JVM提供信息,可以用于代码的自动生成、验证等。 通过上述知识点的学习,初学者可以建立起对Java编程的全面认识。"JAVA基础实例200题"的PDF文件将...

    Java核心技术 卷1 基础知识 原书第9版

    1. **Java语言概述**:书中首先介绍了Java的历史、特点和应用领域,让读者对Java有一个全面的认识,包括其跨平台特性、面向对象的设计哲学以及强大的库支持。 2. **环境搭建**:讲解如何安装Java开发工具包(JDK)...

Global site tag (gtag.js) - Google Analytics