美文网首页
自定义注解

自定义注解

作者: 法式大面包 | 来源:发表于2017-04-25 20:54 被阅读0次

第一步:自定义注解类

自定义注解的签名为public @interface ,在该类上需要再打两个注解,@Target和 @Retention,其中@Target表示哪里需要打这个注解,包括方法,类等。而@Retentio表示该注解在什么时候使用,有编译时、加载时和运行时。具体代码如下:

package com.czy.springdemo;

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

/**
 *  自定义Author 注解
 * @author czy
 *
 */
//注解是放在哪个位置
@Target(ElementType.TYPE)
//注解的使用时机,有编译时、加载时和运行时
@Retention(RetentionPolicy.RUNTIME)
public @interface Author {

    public String name() default "lxj";

    public int workingAge() default 0;

}

这个注解表示是打在类上的运行时注解。 public String name() default "lxj";这个方法表示给注解一个默认实现,如果在大注解没有指定name和workingAge属性时,将会使用这个默认的值。例如:@Author(name="czy", workingAge=24)。name()和 workingAge()都是自定义的注解的一些属性。

第二步:使用自定义注解类

使用这个注解非常的简单,只需要需要使用注解的类上打上注解即可。@Author(name="czy", workingAge=24)。如图,在Student类上打上自定义的注解。

czy.png

上图的@Component表示将Student讲给Spring的IoC容器管理。

第三步:获取自定义注解

现在注解的已经定义好了并且可以使用了,那么在代码中怎么来使用自己定的注解呢?我们首先通过SpringIoC容器拿到一个Student类的对象,然后通过这个Student的对象的getClass()拿到类对象,对类对象getAnnotation(Author.class)方法,Author.class是上面自定义的注解类。
  最后展示一下获取注解的代码:

package com.czy.springdemo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

 /**
 *  自定义注解测试
 * @author czy
 *
 */
public class App {

    public static void main( String[] args ) {
        //让spring去读配置文件,然后创建IOC容器并管理起来
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //从上下文中拿到配置文件中bean的id为stu的对象,并指明类
        Student stu1 = ctx.getBean("stu1", Student.class);
    
        //拿注解
        Author authorAnn = stu1.getClass().getAnnotation(Author.class);
        if(authorAnn != null){
            System.out.println(authorAnn.name());
            System.out.println(authorAnn.workingAge());
        }
        ((ClassPathXmlApplicationContext) ctx).close();
    }
}

相关文章

网友评论

      本文标题:自定义注解

      本文链接:https://www.haomeiwen.com/subject/gtkbzttx.html