第一步:自定义注解类
自定义注解的签名为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类上打上自定义的注解。
上图的@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();
}
}