`

annotations-->注解的创建和使用

阅读更多
package annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase
{
    public int id();
    
    public String description() default "no description";// 默认的描述
}
 
package annotation;

import java.util.List;

public class PasswordUtils
{
    // 使用注解
    @UseCase(id = 47, description = "passwords must contain at least one numeric")
    public boolean validatePassword(String password)
    {
        return password.matches("\\w*\\d\\w*");
    }
    
    @UseCase(id = 47)
    public String encryptPassword(String password)
    {
        return new StringBuilder(password).reverse().toString();
    }
    
    @UseCase(id = 47, description = "new passwords can't equal previously used ones")
    public boolean checkForNewPassword(List<String> prevPasswords, String password)
    {
        return !prevPasswords.contains(password);
    }
}
 
package annotation;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

//注解处理器
public class UseCaseTracker
{
    public static void trackUseCases(java.util.List<Integer> useCases, Class<?> cl)
    {
        for (Method m : cl.getDeclaredMethods())
        {
            UseCase uc = m.getAnnotation(UseCase.class);
            if (uc != null)
            {
                System.out.println("Found Use Case : " + uc.id() + " " + uc.description());
                useCases.remove(new Integer(uc.id()));
                
            }
        }
        for (int i : useCases)
        {
            System.out.println("warning : Missing use case -" + i);
        }
        
    }
    
    public static void main(String[] args)
    {
        List<Integer> useCases = new ArrayList<Integer>();
        Collections.addAll(useCases, 47, 48, 49, 50);
        trackUseCases(useCases, PasswordUtils.class);
    }
}
 
分享到:
评论

相关推荐

    jackson-annotations-2.2.3.jar.zip

    总结,"jackson-annotations-2.2.3.jar.zip" 提供了Jackson注解库的2.2.3版本,这些注解是处理JSON数据时的强大工具,使得Java对象和JSON之间的转换变得更加简单和灵活。结合其他Jackson模块,开发者可以构建出高效...

    hibernate-annotations-3.4.0.GA

    1. 创建实体类:利用@Entity、@Table、@Id等注解创建符合数据库结构的Java实体类。 2. 数据库操作:使用Session的save()、update()、delete()方法进行CRUD操作,或者使用Criteria、HQL等查询语言进行复杂查询。 3. ...

    hibernate-annotations-3.4.0.GA.chm中文版

    8. **时间戳注解**:@Temporal和@CreationTimestamp、@UpdateTimestamp可以自动管理记录的创建和更新时间。 9. **转换器注解**:@Converter和@AttributeConverter用于自定义类型转换,将Java对象转化为数据库可存储...

    annotations-api rt servlet-api.jar

    在实际开发中,`annotations-api.jar`通常与Maven或Gradle等构建工具一起使用,以确保编译时注解的正确处理。`rt.jar`则是Java运行环境的标准配置,无需开发者特别关注。而`servlet-api.jar`在开发基于Java的Web应用...

    jackson-annotations-2.2.3,jackson-core-2.2.3,jackson-databind-2.2.3

    - 处理日期和时间:`@JsonFormat`注解可以定制日期和时间的序列化格式,也可以使用`JavaTimeModule`处理Java 8的日期时间API。 - 集合和Map的处理:Jackson可以自动处理List、Set、Map等集合类型,也可以自定义转换...

    hibernate-annotations-3.4.0.GA+hibernate-distribution-3.3.2.GA-dist

    而Hibernate Annotations则是Hibernate框架的重要组成部分,它使得我们可以在实体类上直接使用注解进行对象关系映射,避免了XML配置文件的繁琐。本文将深入探讨Hibernate 3.3.2和Hibernate Annotations 3.4.0的核心...

    jsoup-annotations是Jsoup注解的POJO

    2. **创建注解的Pojo类**:接着,定义一个Java类,并使用JSoup-Annotations的注解来标注字段。比如,如果你要解析一个包含标题、作者和内容的博客文章,可以创建如下类: ```java public class BlogPost { @Id(...

    source-generator-annotations-test-源码.rar

    - **src/main/java**:这是主要的源代码目录,包含了注解定义和使用这些注解的类。 - **src/main/resources**:可能包含配置文件或其他资源。 - **src/test/java**:测试代码存放的地方,包括对源码生成器功能的...

    yajco-annotations-0.5.9.zip

    开源性质使得这两个工具都可以自由使用和定制,为开发者提供了强大的功能和灵活性。通过学习和应用这些工具,开发者可以更高效地处理解析任务,同时也能便捷地在Confluence中管理和分享项目文档。

    annotations-10.0.2.jar.zip

    《详解Java注解(Annotations)及其在10.0.2版本中的应用》 ...`annotations-10.0.2.jar`作为注解库,为开发者提供了更多的注解选择和功能支持,正确理解和使用这些注解,能有效提升开发效率和代码质量。

    hibernate3-[annotations-commons-annotations].rar

    本篇将深入探讨Hibernate3中的注解功能以及与Commons Annotations的结合使用,旨在帮助开发者更好地理解和应用这些技术。 首先,让我们来看看核心组件`hibernate3.jar`。这个JAR文件包含了Hibernate3框架的基础组件...

    cglib-2.2.jar,ehcache-spring-annotations-1.1.2.jar

    而Java配置则使用`@EnableCaching`注解开启缓存支持,并通过`CacheManager`和`Cache`注解来配置具体的Ehcache实例。 总结来说,`cglib-2.2.jar`和`ehcache-spring-annotations-1.1.2.jar`这两个库在Spring应用中...

    hibernate-annotations-3.4.0.GA and hibernate-entitymanager-3.4.0.GA

    本篇将详细探讨`hibernate-annotations-3.4.0.GA`和`hibernate-entitymanager-3.4.0.GA`这两个版本中的核心知识点,尤其是它们在注释和枚举映射方面的应用。 首先,`hibernate-annotations`是Hibernate提供的一套...

    jackson-annotations-2.9.0jar包.zip

    总的来说,Jackson-Annotations库极大地简化了JSON在Java应用中的使用,通过注解的方式避免了大量手动转换代码,提高了代码的可读性和维护性。在现代Java Web应用、RESTful服务或者任何需要处理JSON数据的场景中,...

    hibernate-annotations-3.4.0.GA.zip

    `hibernate-annotations-3.4.0.GA`中的API文档是开发者理解和使用Hibernate注解的重要资源。它详细列举了所有可用的注解、接口、类及其方法,提供了详细的参数说明和使用示例。通过查阅API,开发者可以快速定位所需...

    Laravel开发-annotations-for-laravel-5.1

    在本文中,我们将深入探讨Laravel...通过合理使用注解,开发者可以创建出结构清晰、易于理解和扩展的应用程序。如果你正在使用Laravel 5.1或更高版本,强烈建议尝试使用路由注解,它将为你的开发工作带来极大的便利。

    hibernate-annotations-3.3.0.GA

    三、实体类和注解的使用 1. @Entity:标记一个类为数据库表的实体,对应数据库中的一个表。 2. @Table:定义实体所对应的数据库表名,以及表的其他元数据,如schema和catalog。 3. @Id:标识实体的主键字段,可以...

    PyPI 官网下载 | marshmallow-annotations-2.4.0.tar.gz

    例如,你可以使用`@dataclass`或`@attr.s`装饰器来创建数据类,并直接在类属性上使用如`int`,`str`,`List[str]`等类型注解,这样marshmallow-annotations会自动为你生成序列化和反序列化的方法。这种特性使得代码...

    配置整合DWR3.0和Spring2.5使用annotation注解

    在下面的代码中,我们创建了一个名为`UserController`的类,它同时被`@Controller`和`@RemoteProxy`注解标记: ```java package com.myapp.web.controller; import javax.servlet.http.HttpServletRequest; import...

Global site tag (gtag.js) - Google Analytics