java 注解设置注解属性

java 注解设置注解属性
java 注解设置注解属性

ja v a注解设置注解属性

设置注解的属性

实例

定义

使?

个?遇到的使?场景

场景导?

实例

代码地址

引?

设置注解的属性

这种使?场景?较少,但是不失为?种对于注解的深?理解。

实例

定义

Tag.java

1import https://www.360docs.net/doc/e37498483.html,ng.annotation.ElementType;

2import https://www.360docs.net/doc/e37498483.html,ng.annotation.Retention;

3import https://www.360docs.net/doc/e37498483.html,ng.annotation.RetentionPolicy;

4import https://www.360docs.net/doc/e37498483.html,ng.annotation.Target;

5

6@Retention(RetentionPolicy.RUNTIME)

7@Target({ElementType.TYPE, ElementType.METHOD, ElementType.LOCAL_VAR IABLE})

8public@interface Tag {

9

10/**

11* tag 标签

12*

13* @return tag

14*/

15String value() default"";

16

17}

使?

SetValue.java

设置注解的属性

1import com.ryo.jdk.annotation.define.Tag;

2

3import org.junit.Assert;

4

5import https://www.360docs.net/doc/e37498483.html,ng.reflect.Field;

6import https://www.360docs.net/doc/e37498483.html,ng.reflect.InvocationHandler;

7import https://www.360docs.net/doc/e37498483.html,ng.reflect.Method;

8import https://www.360docs.net/doc/e37498483.html,ng.reflect.Proxy;

9import java.util.Map;

10

11public class SetValue {

12

13/**

14* 在每?个类执?之前,设置注解的属性

15* @throws NoSuchFieldException if any

16* @throws IllegalAccessException if any

17*/

18@SuppressWarnings("unchecked")

19public static void beforeClass() throws NoSuchFieldException, Il legalAccessException {

20 Method[] methods = SetValue.class.getDeclaredMethods();

21for(Method method : methods) {

22 Tag tag = method.getAnnotation(Tag.class);

23if(tag !=null) {

24 InvocationHandler h = Proxy.getInvocationHandler(tag

);

25 Field hField = h.getClass().getDeclaredField("member

Values");

26 hField.setAccessible(true);

27 Map memberMethods = (Map) hField.get(h);

28 memberMethods.put("value", "setAnnotation");

29String value = tag.value();

30 Assert.assertEquals("setAnnotation", value);

31 }

32 }

33 }

34

35@Tag

36public void tag() {

37 }

38

39public static void main(String[] args) throws NoSuchFieldExcepti on, IllegalAccessException {

40 beforeClass();

41 }

42}

个?遇到的使?场景

场景导?

TestNG 中的@DataProvider注解,拥有 dataProvider() 属性?来指定数据源。

编写的框架中 dataProvider() 值可以指向固定的值,但是 TestNG 会通过这个属性来进?值的注?和执?。

@DataProvider 的属性

编写的框架通过注解去解析对应的配置?件,导致所有的 @DataProvider 的 dataProvider() 可以使固定的。

但是 TestNG 通过判断 dataProvider() 是否有值,来进?参数化测试。

所以,这是?个固定的属性值,使?同?的属性设置,可以使得?户代码变得更加优雅。

实例

TestNgDataProviderTest.java

1import org.testng.Assert;

2import org.testng.ITestContext;

3import org.testng.annotations.BeforeClass;

4import org.testng.annotations.DataProvider;

5import org.testng.annotations.Test;

6

7import https://www.360docs.net/doc/e37498483.html,ng.reflect.Field;

8import https://www.360docs.net/doc/e37498483.html,ng.reflect.InvocationHandler;

9import https://www.360docs.net/doc/e37498483.html,ng.reflect.Method;

10import https://www.360docs.net/doc/e37498483.html,ng.reflect.Proxy;

11import java.util.Map;

12

13public class TestNgDataProviderTest {

14

15/**

16* 是否为空数据准备

17* @return 数据

18*/

19@DataProvider(name ="TestDataProvider")

20public Object[][] isEmptyDataProvider(Method method, ITestContex t testContext) {

21return new Object[][]{

22 {"", true},

23 {null, true},

24 {" ", true},

25 {"1", false},

26 {" 1", false}

27 };

28 }

29

30/**

31* 在每?个类执?之前,设置注解的属性

32* @throws NoSuchFieldException if any

33* @throws IllegalAccessException if any

34*/

35@BeforeClass

36public void beforeClass() throws NoSuchFieldException, IllegalAc cessException {

37 Method[] methods =this.getClass().getDeclaredMethods();

38for(Method method : methods) {

39 Test test = method.getAnnotation(Test.class);

40if(test !=null) {

41 InvocationHandler h = Proxy.getInvocationHandler(tes

t);

42 Field hField = h.getClass().getDeclaredField("member

Values");

43 hField.setAccessible(true);

44 Map memberMethods = (Map) hField.get(h);

45 memberMethods.put("dataProvider", "TestDataProvider"

);

46String value = test.dataProvider();

47 Assert.assertEquals("TestDataProvider", value);

48 }

49 }

50 }

51

52@Test

53public void isEmptyTest(final String string, boolean result) {

54 System.out.println(string+","+result);

55 Assert.assertEquals(result, StringUtil.isEmpty(string));

56 }

57}

代码地址

通过反射,动态修改注解的某个属性值annotation 定义与解析

引?

webservice注解详解

webservice注解详解

javax.jws.WebService 当实现Web Service 时,@WebService 注释标记Java 类;实现Web Service 接口时,标记服务端点接口(SEI)。 要点: ? 实现Web Service 的Java 类必须指定@WebService 或@WebServiceProvider 注释。不能同时提供这两种注释。 此注释适用于客户机/服务器SEI 或JavaBeans 端点的服务器端点实现类。 ? 如果注释通过endpointInterface属性引用了某个SEI,那么还必须使用@WebService 注释来注释该SEI。 ? 请参阅适用于使用@WebService 注释的类的方法的规则,以了解更多信息 ?注释目标:类型 ?属性: - name wsdl:portType的名称。缺省值为Java 类或接口的非限定名称。(字符串)- targetNamespace 指定从Web Service 生成的WSDL 和XML 元素的XML 名称空间。缺省值为从包含该Web Service 的包名映射的名称空间。(字符串) - serviceName 指定Web Service 的服务名称:wsdl:service。缺省值为Java 类的简单名称 + Service。(字符串) - endpointInterface 指定用于定义服务的抽象Web Service 约定的服务端点接口的限定名。如果指定了此限定名,那么会使用该服务端点接口来确定抽象WSDL 约定。(字符串)- portName wsdl:portName。缺省值为https://www.360docs.net/doc/e37498483.html,+Port。(字符串)

Java注解

注解 可以先把注解当成注释来看,注释就是给类的各个组成部分(包、类名、构造器、属性、方法、方法参数,以及局部变量)添加一些解释。 可以先不去管注解是用来干什么的,就把它当成注释来看。注解的格式当然不能与注释相同,注解是需要声明的,声明注解与声明一个接口有些相似。当然Java也有一些内置注解,例如:@Override就是内置注解。 1声明注解 声明注解与声明一个接口相似,它需要使用@interface。一个注解默认为Annotation的 注解还可以带有成员,没有成员的注解叫做标记注解。成员的类型只能是基本类型、枚举类型)、String、基本类型数组、String[],以及注解和注解数组类型。 其中String表示成员的类型,value()表示成员名称。其中圆括号不能没有,也不能在圆

括号内放参数,它不是一个方法,只是一个成员变量。 注解可以有多个成员,但如果只有一个成员,那么成员名必须为value。这时在设置成

Java还提供了一些元注解,用来控制注解,例如@Retention和@Target: ●@Target:ElementType类型(枚举类型),表示当前注解可以标记什么东西,可选 值为: TYPE:可以标记类、接口、注解类、Enum。 FIELD:可以标记属性。 METHOD:可以标记就去。 PARAMETER:可以标记参数。 CONSTRUCTOR:可以标记构造器。 LOCAL_VARIABLE:可以标记局部变量。 ANNOTATION_TYPE:可以标记注解类声明。

PACKAGE:可以标记包。 ●@Retention:RetentionPolicy类型(枚举类型),表示注解的可保留期限。可选值为: SOURCE:只在源代码中存在,编译后的字节码文件中不保留注解信息。 CLASS:保留到字节码文件中,但类加载器不会加载注解信息到JVM。 RUNTIME:保留到字节码文件中,并在目标类被类加载器加载时,同时加载注解信息到JVM,可以通过反射来获取注解信息。 2访问注解 很多第三方程序或工具都使用了注解完成特殊的任务,例如Spring、Struts等。它们都提供了自己的注解类库。在程序运行时使用反射来获取注解信息。下面我们来使用反射来获取注解信息。

JAVA简单项目购物系统的整个开发过程详解(内含源码和注释)

1. 购物系统的需求分析和类划分 购物系统本身是一个十分复杂的系统,有很多细节问题如果深究会更加复杂,并且一般购物系统都是网页类型的,要有一个友好的界面,但是作为一个简单项目,该项目只是为了给JAVA初学者介绍一下开发的基本思想,以及面向对象时应该怎样去设计框架和实现流程,所以只

是基于eclipse开发的一个简单的项目,并没有GUI的参与,并且很多细节问题作为后续研究,整体的设计比较简单,但是足以说明很多设计思想和设计理念,那么下面对基本的需求进行分析。 作为一个简单的购物系统,至少需要具备以下功能(这些功能分布在不同级的菜单中): (1)用户登录功能、用户账号密码修改功能,暂时不提供注册功能; (2)用户成功登录后,需要具备客户信息的管理功能、购物结算功能以及一些抽奖活动等; (3)客户信息管理功能下面又可以分出很多功能,比如说:查询、修改、增加等; (4)购物结算功能下面又可以分出很多功能,比如说:商品选购、付款、账单等; (5)抽奖活动下面又可以设计出多种的抽奖形式,从而进一步划分为许多新的功能模块。 (6)在一级菜单中要提供退出系统的功能,在二级菜单中要提供注销登录的功能,其他级菜单都要能够返回上一级菜单。 上面的这些功能都是一些比较基本的功能,那么如果按照面向流程的思想来设计,就会划分很多功能模块,然后按照流程一步步走就行,但是现在我们采用面向对象的思想来设计,那么应该如何考虑设计框架呢?面向对象的主要思想就是将一些需求抽象为许多类,然后建立这些

类之间的联系,通过不同类之间的协同合作,就可以实现所有的功能。所以,现在的主要任务就是如何合理地抽象出这些类,以及这些类要实现什么功能,类之间的联系又是什么?下面通过本次设计的结构对这一过程进行分析。 (1)StartSMS类:用于系统的启动。我们的系统肯定需要一个启动类,这个类里面包含了main方法,用来启动这个系统,这个类是最顶层的,所以不能牵涉太多底层的细节实现,只需要实现一些顶层的基本流程就行,主要还是要调用底层其他类的一些方法来实现功能。 (2)Data类:用来存放我们的所有数据信息,本次设计主要存放的是已经预存的一些可供购买的商品信息和已经注册的会员信息。为什么需要这个类呢?大家想一想,在面向对象的设计中,我们的数据比较多,肯定不能零散地到处定义、任意修改,这样会使得系统的聚合程度太低,容易出现很多错误,并且难以进行后期功能扩展和错误修改,所以我们要把用到的一些公有的数据进行归类,然后放在一个类中,并且在该类中提供对这些数据进行操作的方法。 (3)Menu类:用于显示及处理各级菜单。既然我们设计的是一个购物系统,那么即使再简单,也需要一个基本的菜单,用来和用户进行交互,由于菜单的比较多,并且各级菜单之间层层相连,所以我们需要对菜单进行统一管理,故而出现了菜单类。注意,这里的菜单只是一些顶层的菜单显示和基本的功能调用,具体底层的算法还是需要更加底层的类来实现的。

MyEclipse设置Java代码注释模板

设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素啦。现就每一个元素逐一介绍: 文件(Files)注释标签: /** * @Title: ${file_name} * @Package ${package_name} * @Description: ${todo} * @author chenguang * @date ${date} ${time} * @version V1.0 */ 类型(Types)注释标签(类的注释): /** * 类功能说明 * 类修改者修改日期 * 修改说明 * Title: ${file_name} * Description:清大海辉科技开发平台 * Copyright: Copyright (c) 2006 * Company:北京清大海辉科技有限公司 * @author ${user} * @date ${date} ${time} * @version V1.0 */ 字段(Fields)注释标签: /** * @Fields ${field} : ${todo} */ 构造函数标签: /** * Title: * Description: * ${tags} */

方法(Constructor & Methods)标签: /** * 函数功能说明 * ${user} ${date} * 修改者名字修改日期 * 修改内容 * @param ${tags} * @return ${return_type} * @throws */ getter方法标签: /** * @return ${bare_field_name} */ setter方法标签: /** * @param ${param} ${bare_field_name} */ 加注释快捷键:选中你要加注释的方法或类,按Alt + shift + J。

JAVA注解

JAVA注解 1、什么是注解 从JDK5开始提供名为Annotation(注释)的功能,它被定义为JSR-175规范。注释是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")。注释可以附加在package, class, method, field 等上面,相当于给它们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。如果没有外部解析工具等对其加以解析和处理的情况,本身不会对Java的源代码或class文件等产生任何影响,也不会对它们的执行产生任何影响。 2、JDK5内置的基本注释 JDK5内置了一些常用的注释,可以在编译时帮我们捕获部分编译错误,及提示信息,下面介绍下这些注释的用法: a、@Override定义在https://www.360docs.net/doc/e37498483.html,ng.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。例如我们为某类重写toString()方法却写成了tostring(),并且我们为该方法添加了@Override注释,在编译时,会提示错误:方法未覆盖其父类的方法。 b、@Deprecated定义在https://www.360docs.net/doc/e37498483.html,ng.Deprecated中,此注释可用于修辞方法、属性、类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。 c、@SuppressWarnings定义在https://www.360docs.net/doc/e37498483.html,ng.SuppressWarnings中,用来抑制编译时的警告信息。与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数值都是已经定义好了的,我们选择性的使用就好了,如@SuppressWarnings(value = "unchecked")。 3、自定义注解 Annotation类型使用关键字@interface定义一个注解,Annotation 类型可以被它们自己所标注。Java5.0定义了4个标准的meta-annotation类型,分别是:Target、Retention、Documented、Inherited,它们被用来提供对其它annotation类型作说明。这些类型和它们所支持的类在https://www.360docs.net/doc/e37498483.html,ng.annotation包中可以找到。 @Target的用法:指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。 @Retention的用法:指示注释类型的注释要保留多久。如果注释类型声明中不存在Retention 注释,则保留策略默认为 RetentionPolicy.CLASS。 @Documented的用法:指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。应使用此类型来注释这些类型的声明:其注释会影响由其客户端注释的元素的使用。如果类型声明是用 Documented 来注释的,则其注释将成为注释元素的公共 API 的一部分。Documented是一个没有成员的注释。 @Inherited的用法:指示注释类型自动被子类继承。 Inherited也是一个没有成员的注释。注意,如果使用@Inherited注释类以外的任何事物都是无效的。还要注意,此元注释仅对从超类继承注释有效;对已实现接口的注释无效。

java《注解解析》

Java注解(Annotation) (1) Annotation(注释)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注释是以‘@注释名’在代码中存在的,根据注释参数的个数,我们可以将注释分为:标记注释、单值注释、完整注释三类。它们都不会直接影响到程序的语义,只是作为注释(标识)存在,我们可以通过反射机制编程实现对这些元数据的访问。另外,你可以在编译时选择代码里的注释是否只存在于源代码级,或者它也能在class 文件中出现。 元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: 编写文档:通过代码里标识的元数据生成文档。 代码分析:通过代码里标识的元数据对代码进行分析。 编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查。 基本内置注释 @Override

Java代码 1. package com.iwtxokhtd.annotation; 2. /** 3. * 测试Override注解 4. * @author Administrator 5. * 6. */ 7. public class OverrideDemoTest { 8. 9. //@Override 10. public String tostring(){ 11. return "测试注释"; 12. } 13. } package com.iwtxokhtd.annotation; /** * 测试Override注解 * @author Administrator * */

java+JDBC小项目《学生管理系统》源码带注解

Java+javabean+JDBC学生管理系统 一、项目结构 本项目是使用javabean和jdbc做的,这个包是实体包 这个是菜单包,源码不会再发这些,自己写就好了。 二、项目运行结果

三、源码 废话不多说,直接上源码: 这两个是关键源码,是负责登录和学生信息操作的逻 辑类: public class AdminDaoImpl extends DBHelper implements AdminDao { Admin admin = null; /** * 登录 */ @SuppressWarnings("resource") @Override public Admin login(String name) { String sql = "select * from admin where username=?"; Object[] param = {name}; Object obj = this.excute(sql, param); ResultSet rs = (ResultSet) obj; try { while (rs.next()) { admin = new Admin(); String username = rs.getString("username"); String password = rs.getString("password"); admin.setUsername(username); admin.setPassword(password); } } catch (SQLException e) { System.out.println("未找到此name"); } return admin; } } public class StudentDaoImpl extends DBHelper implements StudentDao { Student stu = null; List list = null; @SuppressWarnings("resource")

JAVA开发规范

1.编程规范 (一)命名规范 1.【强制】所有编程相关的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束 反例:_name / name_ / $name / name$ 正例:name 2.【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。 反例:XingMing [姓名] /xingBie() [性别] 正例:name[姓名] sex[性别]等国际通用的名称,可视为英文。 3. 【强制】类名使用UpperCamelCase(第一个词的首字母,以及后面每个词的首字母都大写,叫做“大骆驼拼写法”) 风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / DTO / VO / DAO 等。正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion

4. 【强制】方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase (第一个词的首字母小写,后面每个词的首字母大写,叫做“小骆驼拼写法”)风格,必须遵从驼峰形式。 正例: localValue / getHttpMessage() / inputUserId 5. 【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。 正例: MAX_STOCK_COUNT 反例: MAX_COUNT 6. 【强制】抽象类命名使用 Abstract或Base 开头;异常类命名使用 Exception结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。 7. 【强制】中括号是数组类型的一部分,数组定义如下:String[] args; 请勿使用String args[]的方式来定义 8. 【强制】POJO类中的任何布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。 反例:定义为基本数据类型 boolean isSuccess;的属性,它的方法也是isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异常。

java注释模板