java 注解

自定义注解

/**
 * 自定义注解
 * 1 使用@interface 定义注解,可以把注解看作是一种特殊的接口
 * 2 在注解中可以定义属性,类似于接口中的抽象方法,格式为:数据类型 属性名();
 * 		当注解只有一个属性时,属性名通常命名为value,注解只有一个value属性时,在使用注解时value属性名可以省略
 * 3 在定义注解时,通常使用@target注解指定当前定义的注解可以修饰哪些成员,Target注解的value属性是 ElementType[] 数组类型,
 * 		ElementType是一个枚举类型,常用的枚举常量有:TYPE,FIELD,METHOD,PARAMETER
 * 4 使用@Retention注解指定当前定义的注解可以保留时长,该注解的value属性是 RetentionPolicy枚举类型,
 * 		常用的枚举常量RUNTIME
 * 5 @Target,@Retention这些修饰注解的注解,称为元注解
 */
@Target(value = {ElementType.TYPE, ElementType.METHOD})    //当前注解可以修饰类或者方法
@Retention(RetentionPolicy.RUNTIME)    //当前注解保留到运行时
public @interface MyAnnotation {
	String value();
}

使用自定义注解

@MyAnnotation(value = "service")    //使用自定义注解修饰类,指定value属性为service
public class UserService {
	//@MyAnnotation()	不能修饰字段,当前自定义注解只能修饰类与方法
	String name;
	
	@MyAnnotation("yingying")    //使用自定义注解修饰方法,注解只有一个value属性时,value属性名可以省略
	public static void sm() {
		System.out.println("UserService类中的sm方法被执行了");
	}
	
}

注解+反射的应用

public class Test {
	public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
		//反射第一步创建Class对象
		Class<UserService> userServiceClass = UserService.class;
		
		//反射类的注解
		MyAnnotation annotation = userServiceClass.getAnnotation(MyAnnotation.class);
		//注解不是必须的
		if (annotation != null) {
			System.out.println(annotation.value());
		}
		
		//反射方法的注解
		//先反射方法
		Method sm = userServiceClass.getMethod("sm");
		//再调用Method对象的getAnnotation()返回方法的注解
		MyAnnotation smAnnotation = sm.getAnnotation(MyAnnotation.class);
		if (smAnnotation != null) {
			//返回方法注解的value属性值
			String value = smAnnotation.value();
			//根据方法注解的value属性值做进一步操作,方法注解的value属性值时yingying则调用执行这个方法
			if ("yingying".equals(value)) {
				sm.invoke(null);    //静态方法在调用时,对象名对峙传递null
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值